Skip to content
This repository has been archived by the owner on Feb 10, 2025. It is now read-only.

Commit

Permalink
[NEW FEATURE] Search function in data (#568)
Browse files Browse the repository at this point in the history
* Create draft PR for #566

* + External invoke search(possible  filter entities from outside), if criteria is exact and reqired entity exist in collection , then entity is selected also in view , otherwise it behave like filter
* fixing layout in search header.
* fix bug with scroll, it is shown when is needed(this commit solve isue about neccessary to resize by grid splitter and then datagrid  scroll bar was occured)

Co-authored-by: sino32 <[email protected]>
Co-authored-by: Peter Barancek <[email protected]>
  • Loading branch information
3 people authored Dec 19, 2022
1 parent 5370c4d commit 829d52f
Show file tree
Hide file tree
Showing 11 changed files with 123 additions and 66 deletions.
13 changes: 13 additions & 0 deletions src/TcoData/src/TcoDataConnector/pex/IDataExchangeOperations.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace TcoData
{
/// <summary>
/// An interaface which grants access to certain operations in DataExchange viewmodel,
/// like searching by id, invoking search or filling the searchbox
/// </summary>
public interface IDataExchangeOperations
{
object SelectedRecord { get; }
string FilterByID { get; set; }
void InvokeSearch();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ namespace TcoData

public partial class TcoDataExchange
{
/// <summary>An interaface which grants access to certain operations in DataExchange viewmodel, like searching by id, invoking search or filling the searchbox</summary>
public IDataExchangeOperations DataExchangeOperations { get; set; }
private dynamic _onliner;

protected dynamic Onliner
Expand Down Expand Up @@ -199,5 +201,7 @@ protected IVortexObject OnlinerVortex
return _onlinerVortex;
}
}


}
}
116 changes: 62 additions & 54 deletions src/TcoData/src/Wpf/TcoData.Wpf/Data/Data/DataView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<Grid Name="ResizableGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="auto" MaxHeight="{Binding ElementName=RootContainer, Path=ActualHeight, Converter={wpf:PercentageConverter}, ConverterParameter=0.5}" />
<RowDefinition MaxHeight="{Binding ElementName=RootContainer, Path=ActualHeight, Converter={wpf:PercentageConverter}, ConverterParameter=0.5}" />

<RowDefinition x:Name="GridSplitterRow" Height="Auto" />
<RowDefinition />
Expand All @@ -38,82 +38,90 @@
Margin="0,5,0,5"
Visibility="{Binding Mode, Mode=OneWay, Converter={wpf:ModeConverter}, ConverterParameter=Display}"
HorizontalAlignment="Stretch" />
<Grid Grid.Row="0">
<Grid Visibility="{Binding Mode, Mode=OneWay, Converter={wpf:ModeConverter}, ConverterParameter=Display}">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">
<ItemsControl Margin="5" HorizontalContentAlignment="Center" Visibility="{Binding Mode, Mode=OneWay, Converter={wpf:ModeConverter}, ConverterParameter=Display}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Background="Transparent" Width="{Binding (FrameworkElement.ActualWidth) , RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" MinWidth="{Binding ItemWidth , RelativeSource={RelativeSource Self}}" ItemHeight="{Binding (ListView.View).ItemHeight , RelativeSource={RelativeSource AncestorType=ListView}}" ItemWidth="{Binding (ListView.View).ItemWidth , RelativeSource={RelativeSource AncestorType=ListView}}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

<StackPanel
Margin="20,0,0,0"
<WrapPanel
Margin="10,0"
x:Name="dropdown"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Orientation="Horizontal">

<TextBlock
Margin="10,0,10,0"
VerticalAlignment="Center"
Text="{x:Static p:strings.PerPage}" />
<ComboBox
Margin="10,0,10,0"
Margin="10,0"
MinWidth="50"
x:Name="PerPageFilterComboBox"
VerticalAlignment="Center"
Background="{Binding ElementName=DataGrid, Path=Background}"
ItemsSource="{Binding PerPageFilter}"
SelectedItem="{Binding Limit, Mode=TwoWay}" />
</StackPanel>
<UniformGrid Grid.Column="1" Columns="3" HorizontalAlignment="Center" Margin="0,5" VerticalAlignment="Center">
</WrapPanel>

<WrapPanel
Margin="10,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal">
<Button Command="{Binding PageDownCommand}" Content="&lt;&lt;" Margin=" 5,0"/>
<Button Command="{Binding FindByCriteriaCommand}" Content="{x:Static p:strings.Documents}" Margin=" 5,0" />
<Button Command="{Binding PageUpCommand}" Content="&gt;&gt;" Margin=" 5,0"/>
</UniformGrid>
</WrapPanel>

<StackPanel
Grid.Column="2"
Height="Auto"
Margin="0,0,0,0"

<WrapPanel
Margin="10,0"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Orientation="Horizontal">

<StackPanel
Margin="0,0,10,0"
HorizontalAlignment="Right"
Orientation="Horizontal">
<StackPanel.Resources>
<ObjectDataProvider x:Key="searchModeFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="data:eSearchMode"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</StackPanel.Resources>
<TextBlock Style="{DynamicResource MaterialDesignCaptionTextBlock}" Margin="10,0,0,0" VerticalAlignment="Center" Text="{x:Static p:strings.Criteria}"></TextBlock>
<ComboBox
Margin="10,0,10,0"
Width="100"
Background="{Binding ElementName=DataGrid, Path=Background}"
ItemsSource="{Binding Source={StaticResource searchModeFromEnum}}"
SelectedItem="{Binding SearchMode, Mode=TwoWay}"/>
<TextBox
x:Name="FilterField"
Height="{Binding ActualHeight, ElementName=PerPageFilterComboBox}"
MinWidth="200"
Margin="0"
VerticalContentAlignment="Center"
BorderBrush="{DynamicResource MaterialDesignDarkSeparatorBackground}"
Text="{Binding FilterByID}" />
<Button
Height="{Binding ActualHeight, ElementName=PerPageFilterComboBox}"
Margin="2,0"
Command="{Binding FindByCriteriaCommand}"
Content="🔍"/>
</StackPanel>
</StackPanel>
</Grid>
<WrapPanel.Resources>
<ObjectDataProvider x:Key="searchModeFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="data:eSearchMode"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

</WrapPanel.Resources>
<TextBlock Style="{DynamicResource MaterialDesignCaptionTextBlock}" Margin="10,0,0,0" VerticalAlignment="Center" Text="{x:Static p:strings.Criteria}"></TextBlock>
<ComboBox
MinWidth="100"
Margin="10,0"
Background="{Binding ElementName=DataGrid, Path=Background}"
ItemsSource="{Binding Source={StaticResource searchModeFromEnum}}"
SelectedItem="{Binding SearchMode, Mode=TwoWay}"/>

</WrapPanel>

<WrapPanel
Margin="10,0"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Orientation="Horizontal">

<TextBox
x:Name="FilterField"
Height="{Binding ActualHeight, ElementName=PerPageFilterComboBox}"
MinWidth="200"
Margin="0"
VerticalContentAlignment="Center"
BorderBrush="{DynamicResource MaterialDesignDarkSeparatorBackground}"
Text="{Binding FilterByID}" />
<Button
Height="{Binding ActualHeight, ElementName=PerPageFilterComboBox}"
Margin="2,0"
Command="{Binding FindByCriteriaCommand}"
Content="🔍"/>
</WrapPanel>

</ItemsControl>
</Grid>
<Grid Grid.Row="1" Visibility="{Binding Mode, Mode=OneWay, Converter={wpf:ModeConverter}, ConverterParameter=Display}">
<Grid.ColumnDefinitions>
Expand Down
16 changes: 15 additions & 1 deletion src/TcoData/src/Wpf/TcoData.Wpf/Data/Data/DataViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

namespace TcoData
{
public class DataViewModel<T> : Vortex.Presentation.Wpf.BindableBase, FunctionAvailability where T : IBrowsableDataObject, new()
public class DataViewModel<T> : Vortex.Presentation.Wpf.BindableBase, IDataExchangeOperations, FunctionAvailability where T : IBrowsableDataObject, new()
{
string filterByID;

Expand All @@ -39,6 +39,7 @@ namespace TcoData
public DataViewModel(IRepository<T> repository, TcoDataExchange dataExchange) : base()
{
this.DataExchange = dataExchange;
this.DataExchange.DataExchangeOperations = this;
DataBrowser = CreateBrowsable(repository);

StartCreateNewCommand = new RelayCommand(p => StartCreatingNew(), _ => this.Mode == ViewMode.Display, () => LogCommand(nameof(StartCreateNewCommand)));
Expand Down Expand Up @@ -354,6 +355,19 @@ void LoadFromPlc()
}, "", () => MessageBox.Show($"{strings.WouldYouLikeToGetFromPLC}", "Data", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes);
}

public void InvokeSearch() => ExternalSearch();
private void ExternalSearch()
{
Filter();

if (DataBrowser.GetRecords(p => p._EntityId == FilterByID).Any() && SearchMode== eSearchMode.Exact)
{
var plain = DataBrowser.FindById(FilterByID);
((dynamic)DataExchange)._data.CopyPlainToShadow(plain);
SelectedRecord = plain;
}
}

public ICommand ExportCommand { get; }
public ICommand ImportCommand { get; }

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.9">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.10">
<POU Name="SandboxContext" Id="{ed8218eb-5f5f-0973-2882-9b75bfb2ad4d}" SpecialFunc="None">
<Declaration><![CDATA[
//<Declaration>
Expand All @@ -12,6 +12,8 @@ VAR
_state : eExamplesStates;
recordId_1 : STRING;
recordId_2 : STRING;
_invokeSearch : BOOL;
_filteringById :STRING;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
Expand Down
2 changes: 1 addition & 1 deletion src/TcoData/src/XAE/XAE/TcoDataTests/POUs/MAIN.TcPOU
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.9">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.10">
<POU Name="MAIN" Id="{0f34ba18-e40b-0caf-2a51-227dede86d56}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM MAIN
VAR
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.9">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.10">
<POU Name="TestDataContext" Id="{84826b8f-78be-0c2b-210a-e7483d252490}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK TestDataContext EXTENDS TcoCore._internals_TcoContext
VAR
Expand All @@ -16,6 +16,8 @@ VAR
_deleteDataWithInvalidIdDone : BOOL;
_dataExistsDone : BOOL;
_createOrUpdateDone : BOOL;
END_VAR
]]></Declaration>
<Implementation>
Expand Down
7 changes: 2 additions & 5 deletions src/TcoData/src/XAE/XAE/XAETcoData.tsproj
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
<?xml version="1.0"?>
<TcSmProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4024.22">
<Project ProjectGUID="{F9E8CB0C-87A9-4377-9234-E2ACBFE1E5FE}" Target64Bit="true" ShowHideConfigurations="#x106">
<TcSmProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4024.25">
<Project ProjectGUID="{F9E8CB0C-87A9-4377-9234-E2ACBFE1E5FE}" TargetNetId="192.168.4.1.1.1" Target64Bit="true" ShowHideConfigurations="#x106">
<System>
<Settings MaxCpus="2" NonWinCpus="1">
<Cpu CpuId="1"/>
</Settings>
<Tasks>
<Task Id="3" Priority="20" CycleTime="100000" AmsPort="350" AdtTasks="true">
<Name>PlcTask</Name>
Expand Down
9 changes: 7 additions & 2 deletions src/TcoData/tests/Sandbox.TcoData.Wpf/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,22 @@
xmlns:local="clr-namespace:Sandbox.TcoData.Wpf"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vortex="http://vortex.mts/xaml"
Width="800"
Width="800"
Height="450"
mc:Ignorable="d"
Title="MainWindow">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<TabControl>
<TabControl >
<TabItem Header="Data">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />

</Grid.RowDefinitions>
<Grid Grid.Row="0">
<vortex:RenderableContentControl DataContext="{Binding Plc.MAIN.sandbox.DataManager}" PresentationType="Control">
Expand All @@ -37,7 +40,9 @@
<vortex:ObservableContentControl DataContext="{Binding SelectedItem, ElementName=dynamicTreeView}" PresentationType="Base-Control" />
</ScrollViewer>
</UniformGrid>-->
<Button Grid.Row="2" Click="Button_Click">ExternalInvokeTest</Button>
</Grid>

</TabItem>
<TabItem Header="Diagnostics">
<vortex:RenderableContentControl DataContext="{Binding Plc.MAIN.sandbox}" PresentationType="Diagnostics" />
Expand Down
6 changes: 6 additions & 0 deletions src/TcoData/tests/Sandbox.TcoData.Wpf/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,11 @@ public MainWindow()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
var dataContext = this.DataContext as MainWindowViewModel;
dataContext.ExternalInvokeSearchTest();
}
}
}
8 changes: 7 additions & 1 deletion src/TcoData/tests/Sandbox.TcoData.Wpf/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ public class MainWindowViewModel
{
public MainWindowViewModel()
{




}

public void ExternalInvokeSearchTest()
{
Plc.MAIN.sandbox.DataManager.DataExchangeOperations.FilterByID = "TEST";
Plc.MAIN.sandbox.DataManager.DataExchangeOperations.InvokeSearch();
}

public TcoDataTestsTwinController Plc { get; } = TcoDataTests.Entry.TcoDataTests;
Expand Down

0 comments on commit 829d52f

Please sign in to comment.