Hi .
When i make cells of XAM Data grid editable, i am not able to drag the cells. please find my XAML code. When i turn AllowEdit="False". It is working properly.
How can i make cells editable and do Drag operation
<UserControl.Resources>
<Style TargetType="{x:Type igDP:CellValuePresenter}">
<Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BackgroundHover" Value="Transparent"/> <Setter Property="BorderHoverBrush" Value="Transparent"/> <!--<Setter Property="BackgroundActive"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#FF85A2B2"/> <GradientStop Offset="1.1" Color="#00FFFFFF"/> </LinearGradientBrush> </Setter.Value> </Setter>--> <Setter Property="BorderActiveBrush" Value="#00151C55"/> <Setter Property="BackgroundSelected"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#FFCAEBFF"/> <GradientStop Offset="1.1" Color="#00FFFFFF"/> <GradientStop Color="#83CAEBFF" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderSelectedBrush" Value="#FF666666"/> <Setter Property="BackgroundFieldSelected"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#FFDDDDDD"/> <GradientStop Offset="1.1" Color="#00FFFFFF"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderFieldSelectedBrush" Value="#FF666666"/> <Setter Property="BackgroundPrimary" Value="#7FE9E9E9"/> <Setter Property="BorderPrimaryBrush" Value="#FFE9E9E9"/> <Setter Property="ForegroundStyle"> <Setter.Value> <Style/> </Setter.Value> </Setter> <Setter Property="ForegroundActiveStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundAlternateStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundPrimaryStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundSelectedStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundFieldSelectedStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundHoverStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="CornerRadius" Value="0"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="Padding" Value="2,0,0,0"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <!-- AS 5/23/07 BR23120 --> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}"> <igWindows:CardPanel MouseDown="CardPanel_MouseDown" >
<ig:DragDropManager.DragSource> <ig:DragSource IsDraggable="True" Drop="DragSource_Drop" DragOver="DragSource_DragOver" DragStart="DragSource_DragStart" DragChannels="channelModule"/>
</ig:DragDropManager.DragSource>
<ig:DragDropManager.DropTarget> <ig:DropTarget IsDropTarget="True" DropChannels="channelModule,ChannelA" DropTargetMarkerBrush="Red"/> </ig:DragDropManager.DropTarget> <!-- [JM 06-06-07] This element is not being used so I am commenting it out. Its Visibility property is initialized to Collapsed and the IsSelected trigger below has commented out the line that sets the Visibility to Visible. Checked with Grant on this and he feels it is left over from early styling efforts and can be removed. --> <!--<Rectangle x:Name="LeftBorder" Fill="#FFBBBBBB" Width="1" Margin="0,1,0,0" HorizontalAlignment="Left" VerticalAlignment="Stretch" Visibility="Collapsed" />--> <Border x:Name="MainBorder" CornerRadius="{TemplateBinding CornerRadius}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"/> <Rectangle x:Name="Active" Fill="{TemplateBinding BackgroundActive}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" SnapsToDevicePixels="True" Opacity="1" Visibility="Collapsed" StrokeThickness="1" Stroke="{TemplateBinding BorderActiveBrush}"/> <ContentPresenter x:Name="PART_EditorSite" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" Style="{TemplateBinding ForegroundStyle}" >
</ContentPresenter> </igWindows:CardPanel> <ControlTemplate.Triggers> <!-- HighlightAsPrimary --> <Trigger Property="HighlightAsPrimary" Value="true"> <Setter Property="Background" Value="{Binding Path=BackgroundPrimary, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderPrimaryBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundPrimaryStyle, RelativeSource={RelativeSource TemplatedParent}}"/> </Trigger> <!-- IsFieldSelected --> <Trigger Property="IsFieldSelected" Value="true"> <Setter Property="Background" Value="{Binding Path=BackgroundFieldSelected, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderFieldSelectedBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundFieldSelectedStyle, RelativeSource={RelativeSource TemplatedParent}}"/> </Trigger> <!-- IsSelected --> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" Value="{Binding Path=BackgroundSelected, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderSelectedBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundSelectedStyle, RelativeSource={RelativeSource TemplatedParent}}"/> <!--<Setter Property="Visibility" Value="Visible" TargetName="LeftBorder" />--> </Trigger> <!-- IsActive --> <Trigger Property="IsActive" Value="true"> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundActiveStyle, RelativeSource={RelativeSource TemplatedParent}}"/> <Setter Property="Visibility" TargetName="Active" Value="Visible"/> </Trigger> <!-- IsMouseOver --> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True"/> <Condition Property="IsSelected" Value="False"/> <Condition Property="IsFieldSelected" Value="False"/> </MultiTrigger.Conditions> <Setter Property="Background" Value="{Binding Path=BackgroundHover, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderHoverBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundHoverStyle, RelativeSource={RelativeSource TemplatedParent}}"/> </MultiTrigger> <!-- Field.IsFixedStateChanging JM 01-22-09 NA 9.1 FixedFields --> <DataTrigger Binding="{Binding Path=Field.IsFixedStateChanging, RelativeSource={RelativeSource Self}}" Value="True"> <Setter Property="Background" Value="#AA8DBAEB"/> <Setter Property="BorderBrush" Value="#AA8DBAEB"/> </DataTrigger> <!--SSP 5/27/09 NAS9.2 IDataErrorInfo Support--> <Trigger Property="IsDataErrorTemplateActive" Value="true"> <Setter TargetName="PART_EditorSite" Property="ContentTemplate" Value="{DynamicResource {x:Static igDP:DataPresenterBase.DataErrorContentTemplateKey}}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <!-- DRCA Foreground Hover Trigger-->
<!-- JJD 4/30/09 - TFS17157 use new IsRecordSelected property --> <Trigger Property="IsRecordSelected" Value="True"> <Setter Property="ForegroundStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> </Trigger>
<!-- DRCA Foreground Selected Trigger--> <!-- JJD 4/30/09 - TFS17157 use new IsMouseOverRecord property --> <Trigger Property="IsMouseOverRecord" Value="True"> <Setter Property="ForegroundStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> </Trigger>
</Style.Triggers> </Style>
</UserControl.Resources> <Grid>
<Label Content="Component:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="-1,0,0,0" /> <Label Content="{Binding Component.ComponentNumber}" Margin="79,0,187,0" VerticalAlignment="Top" FontWeight="Bold" Height="26"/> <Button Content="UnAssign" Command="{Binding UnAssignIOComponents}" HorizontalAlignment="Right" Width="75" Margin="0,0,0.333,2.333" Height="24" VerticalAlignment="Bottom" /> <cts:XamDataGrid x:Name="dgDeviceList" AllowDrop="True" GroupByAreaLocation="None" SelectedItems="{Binding SelectedElements, Mode=OneWayToSource}" DataSource="{Binding IOComponentsBindings}" BorderThickness="1" BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}" ScrollingMode="Immediate" Margin="0,31,0.333,26.333" AssigningFieldLayoutToItem="xamDataGrid1_AssigningFieldLayoutToItem" InitializeRecordDirect="xamDataGrid1_InitializeRecordDirect"><cts:XamDataGrid.FieldLayoutSettings> <igDP:FieldLayoutSettings SelectionTypeRecord="Extended" AutoGenerateFields="False" ExpansionIndicatorDisplayMode="Never" /> </cts:XamDataGrid.FieldLayoutSettings>
<cts:XamDataGrid.FieldSettings>
<!--<igDP:FieldSettings CellClickAction="SelectRecord" AllowGroupBy="False" AllowHiding="Never" AllowEdit="False" AllowRecordFiltering="False" AllowSummaries="False" LabelTextAlignment="Left"/>--> <igDP:FieldSettings AllowEdit="True"/> </cts:XamDataGrid.FieldSettings> <cts:XamDataGrid.FieldLayouts>
<igDP:FieldLayout Key="IOcomponents"> <igDP:FieldLayout.SortedFields> <igDP:FieldSortDescription FieldName="IOSequenceNumber" Direction="Ascending" /> </igDP:FieldLayout.SortedFields> <igDP:Field Name="IOSequenceNumber" Label="Point" Width="0" Visibility="Collapsed"/> <igDP:Field Name="IOcomponentNumber" Label="Address" Width="Auto"> </igDP:Field> <igDP:Field Name="IODeviceName" Label="Tag" Width="Auto" > </igDP:Field> <igDP:Field Name="IODeviceDescription" Label="Description" Width="*" > </igDP:Field> <!--Converter="{StaticResource convert}" --> <igDP:Field Name="Components" Width="Auto" /> </igDP:FieldLayout>
<igDP:FieldLayout Key="child"> <igDP:Field Name="ComponentNumber" Label="Component Number" /> <igDP:Field Name="Description" Label="Description" Width="Auto" /> <igDP:FieldLayout.Settings> <igDP:FieldLayoutSettings LabelLocation="Hidden"/> </igDP:FieldLayout.Settings> </igDP:FieldLayout> </cts:XamDataGrid.FieldLayouts> </cts:XamDataGrid>
Hello Jerovsek,
I investigated this issue in order to reproduce the behavior you had described. On my side the drag drop seems to work as expected even when the edit mode is set to true. If the drop event is fired correctly by your side, the issue might due to the implementation of the drag drop in your data. Could you modify the sample you had attached before to represent the issue so that I could test it further? I could suggest you check if your data is being updated correctly.
Hi Maria,
Below are my event handlers code.
private void xamDataGrid1_AssigningFieldLayoutToItem(object sender, Infragistics.Windows.DataPresenter.Events.AssigningFieldLayoutToItemEventArgs e) {
FieldLayout resultLayout = new FieldLayout();
if (e.ParentExpandableFieldRecord == null) resultLayout = dgDeviceList.FieldLayouts["IOcomponents"]; else resultLayout = dgDeviceList.FieldLayouts["child"];
e.FieldLayout = resultLayout;
}
DataRecordPresenter dp; DataRecordPresenter dragOver; private void DragSource_DragStart(object sender, Infragistics.DragDrop.DragDropStartEventArgs e) { dp = Utilities.GetAncestorFromType(e.DragSource as DependencyObject, typeof(DataRecordPresenter), false) as DataRecordPresenter;
private void DragSource_DragOver(object sender, Infragistics.DragDrop.DragDropMoveEventArgs e) { dragOver = Utilities.GetAncestorFromType(e.DropTarget as DependencyObject, typeof(DataRecordPresenter), false) as DataRecordPresenter;
private void DragSource_Drop(object sender, Infragistics.DragDrop.DropEventArgs e) { dragOver = Utilities.GetAncestorFromType(e.DropTarget as DependencyObject, typeof(DataRecordPresenter), false) as DataRecordPresenter; ComponentList targetIOElement = dragOver.DataRecord.DataItem as ComponentList; ComponentList SourceIOlist = dp.DataRecord.DataItem as ComponentList;
.ViewModel.IOModuleViewModel vm = dragOver.DataPresenter.DataContext as ViewModel.IOModuleViewModel;
//vm.DraggedItem = targetIOlist.IOcomponents.ConnectedComponent; vm.DraggedItem = SourceIOlist.IOcomponents; vm.TargetItem = targetIOElement; vm.saveDraggedIoComponenttoDB(true); //deletes the dragged item from the source element. vm.DeleteConnectedComponentsfromDraggedElement();
private void CardPanel_MouseDown(object sender, MouseButtonEventArgs e) { // dgDeviceList.FieldSettings.AllowEdit = true; e.Handled = true;
// Sort by Operation . private void xamDataGrid1_InitializeRecordDirect(object sender, Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs e) {
//if( e.Record.FieldLayout.Fields[0].Name.ToString() == "IOSequenceNumber") e.Record.RefreshSortPosition(); }
private void dgDeviceList_KeyDown_1(object sender, KeyEventArgs e) {
//if(e.Key == Key.F2) //{ // dgDeviceList.ExecuteCommand(DataPresenterCommands.StartEditMode); //} //if (e.Key == Key.Enter) //{ // dgDeviceList.FieldSettings.AllowEdit = false; // dgDeviceList.ExecuteCommand(DataPresenterCommands.EndEditModeAndAcceptChanges); //} }
// Example 2 private void dgDeviceList_CellActivated(object sender, Infragistics.Windows.DataPresenter.Events.CellActivatedEventArgs e) { Dispatcher.BeginInvoke(new Action(() => { CellValuePresenter.FromCell(e.Cell).Editor.StartEditMode(); } ), System.Windows.Threading.DispatcherPriority.Background, null);
private void xamDataGrid1_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter || e.Key == Key.Left || e.Key == Key.Up || e.Key == Key.Down) dgDeviceList.ExecuteCommand(DataPresenterCommands.EndEditModeAndAcceptChanges); }
I am checking if this is still an issue for you.
If you require any further assistance, please do not hesitate to ask.
I have looked into the attached project. It seems that everything works as expected in your xaml as it is the same as the one in the project. I suggest this behavior is caused by the operations in the EventHandler definitions. Could you provide me the code for them or a sample project where your issue occurs because I was not able to reproduce it?
Thank you.
Any help on this.
Since The page that has Xam datagrid is used as a drop source from another page as well as drag drop within the same page i need to go by dragdropmanager setting the drag channels.
Can you send me a sample on how to do drag drop with out drag drop manager and setting the record's edit mode to True.