Commit f1a1121d LN

用一个PN有多行数据时弹框让用户选择。

1 个父辈 679fdeda
......@@ -302,7 +302,7 @@ namespace BLL
string CleanData = key[Config.DataSource_DataKey].Replace("<OCR>", "");
if (key.ContainsKey(Config.DataSource_DataKey) && ExtraFileData.AllData.ContainsKey(CleanData))
{
var extraData = ExtraFileData.AllData[CleanData];
var extraData =ExtraFileData.GetSelectDataSource(CleanData);
findOk = true;
foreach (var d in extraData)
{
......@@ -321,7 +321,7 @@ namespace BLL
string CleanData = key[oKey].Replace("<OCR>", "");
if (key.ContainsKey(oKey) && ExtraFileData.AllData.ContainsKey(CleanData))
{
var extraData = ExtraFileData.AllData[CleanData];
var extraData = ExtraFileData.GetSelectDataSource(CleanData);
findOk = true;
foreach (var d in extraData)
{
......@@ -886,34 +886,34 @@ namespace BLL
}
}
private void GetDataButtonClick(object sender, EventArgs e)
{
Dictionary<string, string> valuePairs = new Dictionary<string, string>();
try
{
string datakey = Config.DataSource_DataKey;
foreach (var items in extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == datakey))
{
string value = items.Control.Text;
var data = ExtraFileData.AllData[value];
foreach (var item in data)
{
var ext = extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == item.Key).ToList();
foreach (var Control in ext)
{
Control.Control.Text = item.Value;
valuePairs.Add(Control.Key, item.Value);
}
}
}
lastkey = valuePairs;
}
catch (Exception)
{
LogNet.log.Info("GetDataButtonClick:请求本地文件数据替换出错!");
}
}
//private void GetDataButtonClick(object sender, EventArgs e)
//{
// Dictionary<string, string> valuePairs = new Dictionary<string, string>();
// try
// {
// string datakey = Config.DataSource_DataKey;
// foreach (var items in extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == datakey))
// {
// string value = items.Control.Text;
// var data = ExtraFileData.AllData[value];
// foreach (var item in data)
// {
// var ext = extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == item.Key).ToList();
// foreach (var Control in ext)
// {
// Control.Control.Text = item.Value;
// valuePairs.Add(Control.Key, item.Value);
// }
// }
// }
// lastkey = valuePairs;
// }
// catch (Exception)
// {
// LogNet.log.Info("GetDataButtonClick:请求本地文件数据替换出错!");
// }
//}
public void DrawTextBackground(Dictionary<string, string> key)
{
if (extensions != null && extensions.Count > 0 && !extensions[0].Control.InvokeRequired)
......
......@@ -12,7 +12,10 @@ namespace BLL
{
public class ExtraFileData
{
public static Dictionary<string, Dictionary<string, string>> AllData = new Dictionary<string, Dictionary<string, string>>();
public delegate Dictionary<string, string> DataSelectDelegate(string datakey, List<Dictionary<string, string>> dataList);
public static event DataSelectDelegate DataSelectingEvent;
public static Dictionary<string, List< Dictionary<string, string>>> AllData = new Dictionary<string,List< Dictionary<string, string>>>();
public static List<string> Titles = new List<string>();
public static List<string> DataTitle = new List<string>();
......@@ -77,10 +80,21 @@ namespace BLL
keydata = datas[i];
}
}
if (!string.IsNullOrEmpty(keydata) && !AllData.ContainsKey(keydata))
if (!string.IsNullOrEmpty(keydata) )
{
AllData.Add(keydata, rowdata);
DataTitle.Add(keydata);
List<Dictionary<string, string>> keyList = new List<Dictionary<string, string>>() { };
if (AllData.ContainsKey(keydata))
{
keyList = AllData[keydata];
keyList.Add(rowdata);
AllData[keydata] = keyList;
}
else
{
keyList.Add(rowdata);
AllData.Add(keydata, keyList);
DataTitle.Add(keydata);
}
}
}
......@@ -148,12 +162,23 @@ namespace BLL
emptyrow++;
}
}
if (!string.IsNullOrEmpty(keydata) && !AllData.ContainsKey(keydata))
if (!string.IsNullOrEmpty(keydata))
{
AllData.Add(keydata, rowdata);
DataTitle.Add(keydata);
emptyrow = 0;
}
List<Dictionary<string, string>> keyList = new List<Dictionary<string, string>>() { };
if (AllData.ContainsKey(keydata))
{
keyList = AllData[keydata];
keyList.Add(rowdata);
AllData[keydata] = keyList;
}
else
{
keyList.Add(rowdata);
AllData.Add(keydata, keyList);
DataTitle.Add(keydata);
}
}
if (string.IsNullOrEmpty(keydata))
emptyrow++;
......@@ -206,5 +231,26 @@ namespace BLL
return Encoding.UTF8;
}
}
public static Dictionary<string, string> GetSelectDataSource(string dataKey)
{
List<Dictionary<string, string>> aExtraData = ExtraFileData.AllData[dataKey];
if (aExtraData.Count == 1)
{
return aExtraData[0];
}
else
{
if (DataSelectingEvent == null)
{
return aExtraData[0];
}
LogNet.log.Info("匹配到数据源:" + dataKey+" 共有 "+aExtraData.Count+"条数据,弹框让用户选择");
Dictionary<string, string> selecValue = DataSelectingEvent?.Invoke(dataKey, aExtraData);
return selecValue;
}
}
}
}
......@@ -380,7 +380,7 @@ namespace SmartScan
monitor.Pause = false;
};
wpfMenu.BtnTriggerIOClicked += (s, e) =>
{
{
scanWork.bendi = true;
LogNet.log.Info("按钮点击触发Work");
scanWork.isstart = false;
......@@ -827,9 +827,9 @@ namespace SmartScan
PnlExtension.Left = Width - PnlExtension.Width - 12;
PicShow.Width = PnlExtension.Left - PicShow.Left - 6;
BLLCommon.extension.Printing += Extension_Printing;
BLLCommon.extension.SaveRetrospect += Extension_SaveRetrospect;
BLLCommon.extension.SaveRetrospect += Extension_SaveRetrospect;
BLLCommon.extension.LoadPanel(PnlExtension, BLLCommon.macroKey);
ExtraFileData.DataSelectingEvent += ExtraFileData_DataSelectingEvent;
//语言
CboLanguage.Items.AddRange(Language.Name.ToArray());
CboLanguage.SelectedText = BLLCommon.config.Language;
......@@ -845,7 +845,7 @@ namespace SmartScan
// 设置窗体大小为屏幕宽度的四分之三,高度为屏幕高度
this.Size = new Size((int)(screenBounds.Width * 0.75), screenBounds.Height);
if (CheckCamera() && CheckIOModule())
{
BtnStart.Enabled = true;
......@@ -862,6 +862,35 @@ namespace SmartScan
changeBtnStartText();
}
private Dictionary<string, string> ExtraFileData_DataSelectingEvent(string datakey, List<Dictionary<string, string>> dataList)
{
//string key = "3635854-2";
//ExtraFileData_DataSelectingEvent(key, ExtraFileData.AllData[key]);
if (dataList == null || dataList.Count == 0)
return null;
if (dataList.Count == 1)
return dataList[0];
Func<Dictionary<string, string>> show = () =>
{
var dlg = new DataSelectControl(datakey, dataList);
bool? res = dlg.ShowDialog();
if (res.HasValue && res.Value && dlg.SelectedData != null)
return dlg.SelectedData;
return dataList[0];
};
if (InvokeRequired)
{
Dictionary<string, string> selected = null;
Invoke(new Action(() => selected = show()));
return selected ?? dataList[0];
}
else
{
return show();
}
}
private Dictionary<string, string> Extension_GetUIKeyWords()
{
return wpfControl.GetRecognitionData();
......
......@@ -457,4 +457,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? Are you sure you want
Dialog_SureSaveSFields 是否要保存选中的字段? Save selected fields?
Dialog_NoValidParametersAvailable 没有可用的打印参数? No valid print parameters available?
Dialog_NoKeywordSelected 未选择关键字! No keyword selected!
Dialog_SelectDatasetTitle 数据集选择 Data Set Selection
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} matched multiple rows of data. Please select:
Dialog_WPF_Ok 确定 SURE
......@@ -524,3 +524,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ
Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか?
NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません?
NoKeywordSelected 未选择关键字! キーワードが選択されていません!
Dialog_SelectDatasetTitle 数据集选择 データセット選択
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 複数行のデータがマッチしました。選択してください
Dialog_WPF_Ok 确定 確認
......@@ -524,4 +524,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ
Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか?
NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません?
NoKeywordSelected 未选择关键字! キーワードが選択されていません!
Dialog_SelectDatasetTitle 数据集选择 データセット選択
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 複数行のデータがマッチしました。選択してください
Dialog_WPF_Ok 确定 確認
......@@ -554,3 +554,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 是否要删除选中
Dialog_SureSaveSFields 是否要保存选中的字段? 是否要保存选中的字段?
Dialog_NoValidParametersAvailable 没有可用的打印参数? 没有可用的打印参数?
Dialog_NoKeywordSelected 未选择关键字! 未选择关键字!
Dialog_SelectDatasetTitle 数据集选择 数据集选择
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 匹配到多行数据,请选择:
Dialog_WPF_Ok 确定 确定
<Window x:Class="SmartScan.SetControl.WPF.DataSelectControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="520" Width="860"
WindowStartupLocation="CenterScreen"
WindowStyle="None" ResizeMode="NoResize" Topmost="True"
Background="#202020" Foreground="#f0f0f0" ShowInTaskbar="False">
<Grid Margin="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock x:Name="MsgCenter"
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="18" FontWeight="Bold" Foreground="#FFFFFF"
TextWrapping="Wrap" TextAlignment="Center"
Margin="0,0,0,12"/>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<WrapPanel x:Name="Container" ItemWidth="380" ItemHeight="Auto"/>
</ScrollViewer>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,16,0,0">
<Button x:Name="BtnOK" Width="160" Height="40" Click="BtnOK_Click"
Background="#0078D7" Foreground="#FFFFFF" BorderBrush="#005A9E" FontSize="16"/>
</StackPanel>
</Grid>
</Window>
using MemoryRead;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace SmartScan.SetControl.WPF
{
public partial class DataSelectControl : Window
{
private readonly List<Dictionary<string, string>> _dataList;
private int _selectedIndex = -1;
private string dataKey = "";
public Dictionary<string, string> SelectedData { get; private set; }
public DataSelectControl(string datakey, List<Dictionary<string, string>> dataList)
{
this.dataKey = datakey;
InitializeComponent();
Topmost = true;
_dataList = dataList ?? new List<Dictionary<string, string>>();
MsgCenter.Text = string.Format(LanguageWwitchover.Dialog("SelectDatasetMessage", "{0} 匹配到多行数据,请选择:"), datakey);
BtnOK.Content = LanguageWwitchover.Dialog("WPF_Ok", "确定");
LoadLabels();
if (_dataList.Count > 0 && Container.Children.Count > 0 && Container.Children[0] is Label first)
SelectLabel(first, 0);
}
private void LoadLabels()
{
Container.Children.Clear();
if (_dataList.Count <= 2)
{
Container.ItemWidth = 800;
}
else
{
Container.ItemWidth = 380;
}
for (int i = 0; i < _dataList.Count; i++)
{
var label = CreateItemLabel(i, _dataList[i]);
Container.Children.Add(label);
}
}
private Label CreateItemLabel(int index, Dictionary<string, string> data)
{
var tb = new System.Windows.Controls.TextBlock
{
TextWrapping = TextWrapping.Wrap,
Text = BuildDatasetText(data),
Margin = new Thickness(4),
Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(234, 234, 234)),
FontSize = 14
};
var lbl = new Label
{
Content = tb,
Padding = new Thickness(10),
Margin = new Thickness(8),
BorderBrush = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(102, 102, 102)),
BorderThickness = new Thickness(1),
Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(48, 48, 48)),
Cursor = System.Windows.Input.Cursors.Hand,
Tag = index,
Width = 380,
};
lbl.MouseLeftButtonUp += (s, e) => SelectLabel((Label)s, (int)lbl.Tag);
return lbl;
}
private void SelectLabel(Label lbl, int index)
{
_selectedIndex = index;
foreach (var child in Container.Children)
{
if (child is Label l)
{
l.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(48, 48, 48));
l.BorderBrush = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(102, 102, 102));
}
}
lbl.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(0, 120, 215));
lbl.BorderBrush = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(0, 120, 215));
}
private string BuildDatasetText(Dictionary<string, string> data)
{
var parts = new List<string>();
foreach (var kv in data)
{
parts.Add($"{kv.Key}: {kv.Value}");
}
return string.Join("\n", parts);
}
private void BtnOK_Click(object sender, RoutedEventArgs e)
{
if (_selectedIndex >= 0 && _selectedIndex < _dataList.Count)
{
SelectedData = _dataList[_selectedIndex];
LogUtil.info("用户选择了数据集: " + dataKey + ", " + BuildDatasetText(SelectedData));
DialogResult = true;
}
else
{
DialogResult = false;
}
}
}
}
......@@ -252,6 +252,9 @@
<Compile Include="SetControl\WPF\Convent\IsAutoIdFieldConverter.cs" />
<Compile Include="SetControl\WPF\Convent\OcrTextHighlighterConverter.cs" />
<Compile Include="SetControl\WPF\Convent\WidthMinusMarginConverter.cs" />
<Compile Include="SetControl\WPF\DataSelectControl.xaml.cs">
<DependentUpon>DataSelectControl.xaml</DependentUpon>
</Compile>
<Compile Include="SetControl\WPF\ImageViewerControl.xaml.cs">
<DependentUpon>ImageViewerControl.xaml</DependentUpon>
</Compile>
......@@ -605,6 +608,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="SetControl\WPF\DataSelectControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="SetControl\WPF\ImageViewerControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!