Commit f1a1121d LN

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

1 个父辈 679fdeda
...@@ -302,7 +302,7 @@ namespace BLL ...@@ -302,7 +302,7 @@ namespace BLL
string CleanData = key[Config.DataSource_DataKey].Replace("<OCR>", ""); string CleanData = key[Config.DataSource_DataKey].Replace("<OCR>", "");
if (key.ContainsKey(Config.DataSource_DataKey) && ExtraFileData.AllData.ContainsKey(CleanData)) if (key.ContainsKey(Config.DataSource_DataKey) && ExtraFileData.AllData.ContainsKey(CleanData))
{ {
var extraData = ExtraFileData.AllData[CleanData]; var extraData =ExtraFileData.GetSelectDataSource(CleanData);
findOk = true; findOk = true;
foreach (var d in extraData) foreach (var d in extraData)
{ {
...@@ -321,7 +321,7 @@ namespace BLL ...@@ -321,7 +321,7 @@ namespace BLL
string CleanData = key[oKey].Replace("<OCR>", ""); string CleanData = key[oKey].Replace("<OCR>", "");
if (key.ContainsKey(oKey) && ExtraFileData.AllData.ContainsKey(CleanData)) if (key.ContainsKey(oKey) && ExtraFileData.AllData.ContainsKey(CleanData))
{ {
var extraData = ExtraFileData.AllData[CleanData]; var extraData = ExtraFileData.GetSelectDataSource(CleanData);
findOk = true; findOk = true;
foreach (var d in extraData) foreach (var d in extraData)
{ {
...@@ -886,34 +886,34 @@ namespace BLL ...@@ -886,34 +886,34 @@ namespace BLL
} }
} }
private void GetDataButtonClick(object sender, EventArgs e) //private void GetDataButtonClick(object sender, EventArgs e)
{ //{
Dictionary<string, string> valuePairs = new Dictionary<string, string>(); // Dictionary<string, string> valuePairs = new Dictionary<string, string>();
try // try
{ // {
string datakey = Config.DataSource_DataKey; // string datakey = Config.DataSource_DataKey;
foreach (var items in extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == datakey)) // foreach (var items in extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == datakey))
{ // {
string value = items.Control.Text; // string value = items.Control.Text;
var data = ExtraFileData.AllData[value]; // var data = ExtraFileData.AllData[value];
foreach (var item in data) // foreach (var item in data)
{ // {
var ext = extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == item.Key).ToList(); // var ext = extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == item.Key).ToList();
foreach (var Control in ext) // foreach (var Control in ext)
{ // {
Control.Control.Text = item.Value; // Control.Control.Text = item.Value;
valuePairs.Add(Control.Key, item.Value); // valuePairs.Add(Control.Key, item.Value);
} // }
} // }
} // }
lastkey = valuePairs; // lastkey = valuePairs;
} // }
catch (Exception) // catch (Exception)
{ // {
LogNet.log.Info("GetDataButtonClick:请求本地文件数据替换出错!"); // LogNet.log.Info("GetDataButtonClick:请求本地文件数据替换出错!");
} // }
} //}
public void DrawTextBackground(Dictionary<string, string> key) public void DrawTextBackground(Dictionary<string, string> key)
{ {
if (extensions != null && extensions.Count > 0 && !extensions[0].Control.InvokeRequired) if (extensions != null && extensions.Count > 0 && !extensions[0].Control.InvokeRequired)
......
...@@ -12,7 +12,10 @@ namespace BLL ...@@ -12,7 +12,10 @@ namespace BLL
{ {
public class ExtraFileData 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> Titles = new List<string>();
public static List<string> DataTitle = new List<string>(); public static List<string> DataTitle = new List<string>();
...@@ -77,10 +80,21 @@ namespace BLL ...@@ -77,10 +80,21 @@ namespace BLL
keydata = datas[i]; keydata = datas[i];
} }
} }
if (!string.IsNullOrEmpty(keydata) && !AllData.ContainsKey(keydata)) if (!string.IsNullOrEmpty(keydata) )
{ {
AllData.Add(keydata, rowdata); List<Dictionary<string, string>> keyList = new List<Dictionary<string, string>>() { };
DataTitle.Add(keydata); 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 ...@@ -148,12 +162,23 @@ namespace BLL
emptyrow++; emptyrow++;
} }
} }
if (!string.IsNullOrEmpty(keydata) && !AllData.ContainsKey(keydata))
if (!string.IsNullOrEmpty(keydata))
{ {
AllData.Add(keydata, rowdata); List<Dictionary<string, string>> keyList = new List<Dictionary<string, string>>() { };
DataTitle.Add(keydata); if (AllData.ContainsKey(keydata))
emptyrow = 0; {
} keyList = AllData[keydata];
keyList.Add(rowdata);
AllData[keydata] = keyList;
}
else
{
keyList.Add(rowdata);
AllData.Add(keydata, keyList);
DataTitle.Add(keydata);
}
}
if (string.IsNullOrEmpty(keydata)) if (string.IsNullOrEmpty(keydata))
emptyrow++; emptyrow++;
...@@ -206,5 +231,26 @@ namespace BLL ...@@ -206,5 +231,26 @@ namespace BLL
return Encoding.UTF8; 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 ...@@ -380,7 +380,7 @@ namespace SmartScan
monitor.Pause = false; monitor.Pause = false;
}; };
wpfMenu.BtnTriggerIOClicked += (s, e) => wpfMenu.BtnTriggerIOClicked += (s, e) =>
{ {
scanWork.bendi = true; scanWork.bendi = true;
LogNet.log.Info("按钮点击触发Work"); LogNet.log.Info("按钮点击触发Work");
scanWork.isstart = false; scanWork.isstart = false;
...@@ -827,9 +827,9 @@ namespace SmartScan ...@@ -827,9 +827,9 @@ namespace SmartScan
PnlExtension.Left = Width - PnlExtension.Width - 12; PnlExtension.Left = Width - PnlExtension.Width - 12;
PicShow.Width = PnlExtension.Left - PicShow.Left - 6; PicShow.Width = PnlExtension.Left - PicShow.Left - 6;
BLLCommon.extension.Printing += Extension_Printing; BLLCommon.extension.Printing += Extension_Printing;
BLLCommon.extension.SaveRetrospect += Extension_SaveRetrospect; BLLCommon.extension.SaveRetrospect += Extension_SaveRetrospect;
BLLCommon.extension.LoadPanel(PnlExtension, BLLCommon.macroKey); BLLCommon.extension.LoadPanel(PnlExtension, BLLCommon.macroKey);
ExtraFileData.DataSelectingEvent += ExtraFileData_DataSelectingEvent;
//语言 //语言
CboLanguage.Items.AddRange(Language.Name.ToArray()); CboLanguage.Items.AddRange(Language.Name.ToArray());
CboLanguage.SelectedText = BLLCommon.config.Language; CboLanguage.SelectedText = BLLCommon.config.Language;
...@@ -845,7 +845,7 @@ namespace SmartScan ...@@ -845,7 +845,7 @@ namespace SmartScan
// 设置窗体大小为屏幕宽度的四分之三,高度为屏幕高度 // 设置窗体大小为屏幕宽度的四分之三,高度为屏幕高度
this.Size = new Size((int)(screenBounds.Width * 0.75), screenBounds.Height); this.Size = new Size((int)(screenBounds.Width * 0.75), screenBounds.Height);
if (CheckCamera() && CheckIOModule()) if (CheckCamera() && CheckIOModule())
{ {
BtnStart.Enabled = true; BtnStart.Enabled = true;
...@@ -862,6 +862,35 @@ namespace SmartScan ...@@ -862,6 +862,35 @@ namespace SmartScan
changeBtnStartText(); 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() private Dictionary<string, string> Extension_GetUIKeyWords()
{ {
return wpfControl.GetRecognitionData(); return wpfControl.GetRecognitionData();
......
...@@ -457,4 +457,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? Are you sure you want ...@@ -457,4 +457,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? Are you sure you want
Dialog_SureSaveSFields 是否要保存选中的字段? Save selected fields? Dialog_SureSaveSFields 是否要保存选中的字段? Save selected fields?
Dialog_NoValidParametersAvailable 没有可用的打印参数? No valid print parameters available? Dialog_NoValidParametersAvailable 没有可用的打印参数? No valid print parameters available?
Dialog_NoKeywordSelected 未选择关键字! No keyword selected! 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 是否要删除选中的字段? 選択されたフィ ...@@ -524,3 +524,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ
Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか? Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか?
NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません? NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません?
NoKeywordSelected 未选择关键字! キーワードが選択されていません! NoKeywordSelected 未选择关键字! キーワードが選択されていません!
Dialog_SelectDatasetTitle 数据集选择 データセット選択
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 複数行のデータがマッチしました。選択してください
Dialog_WPF_Ok 确定 確認
...@@ -524,4 +524,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ ...@@ -524,4 +524,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ
Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか? Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか?
NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません? NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません?
NoKeywordSelected 未选择关键字! キーワードが選択されていません! NoKeywordSelected 未选择关键字! キーワードが選択されていません!
Dialog_SelectDatasetTitle 数据集选择 データセット選択
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 複数行のデータがマッチしました。選択してください
Dialog_WPF_Ok 确定 確認
...@@ -554,3 +554,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 是否要删除选中 ...@@ -554,3 +554,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 是否要删除选中
Dialog_SureSaveSFields 是否要保存选中的字段? 是否要保存选中的字段? Dialog_SureSaveSFields 是否要保存选中的字段? 是否要保存选中的字段?
Dialog_NoValidParametersAvailable 没有可用的打印参数? 没有可用的打印参数? Dialog_NoValidParametersAvailable 没有可用的打印参数? 没有可用的打印参数?
Dialog_NoKeywordSelected 未选择关键字! 未选择关键字! 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 @@ ...@@ -252,6 +252,9 @@
<Compile Include="SetControl\WPF\Convent\IsAutoIdFieldConverter.cs" /> <Compile Include="SetControl\WPF\Convent\IsAutoIdFieldConverter.cs" />
<Compile Include="SetControl\WPF\Convent\OcrTextHighlighterConverter.cs" /> <Compile Include="SetControl\WPF\Convent\OcrTextHighlighterConverter.cs" />
<Compile Include="SetControl\WPF\Convent\WidthMinusMarginConverter.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"> <Compile Include="SetControl\WPF\ImageViewerControl.xaml.cs">
<DependentUpon>ImageViewerControl.xaml</DependentUpon> <DependentUpon>ImageViewerControl.xaml</DependentUpon>
</Compile> </Compile>
...@@ -605,6 +608,10 @@ ...@@ -605,6 +608,10 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="SetControl\WPF\DataSelectControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="SetControl\WPF\ImageViewerControl.xaml"> <Page Include="SetControl\WPF\ImageViewerControl.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!