using DataEntity.Share;
using DataRWDAL;
using DataRWDalDrive.DB;
using HxEnum;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using XCommon.Log;
using XHandler.Class.DataEx;
using XImagingXhandler.XDAL;
namespace XHandler.View.MethodProperty
{
///
/// 挑菌前环境设置子页面
///
public partial class ChoiceAgoAspirateChildProperty : System.Windows.Controls.UserControl
{
#region 变量
private int mark = 0;
public MethodChoiceAgoAspirateChild m_choiceAgoAspirateData = null;
#endregion
#region 构造函数
public ChoiceAgoAspirateChildProperty(MethodChoiceAgoAspirateChild choiceAgoAspirateData)
{
mark = 0;
InitializeComponent();
m_choiceAgoAspirateData = choiceAgoAspirateData;
#region 液体类型下拉值
ObservableCollection liquidTypeList = DataModule.getInstance().GetLiquidTypes();
cbLiquidType1.ItemsSource = liquidTypeList;
#endregion
#region 获取液体范围类型下拉值
ObservableCollection liquidRangeList = DataModule.getInstance().GetLiquidRanges();
cbLiquidRange1.ItemsSource = liquidRangeList;
#endregion
tbxTablePos.Text = m_choiceAgoAspirateData.positionText;
this.DataContext = m_choiceAgoAspirateData;
}
#endregion
#region 页面初始化
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
try
{
mark += 1;
if (!string.IsNullOrEmpty(m_choiceAgoAspirateData.armValue))
{
// 根据板位上的耗材类型,显示耗材孔位示意图
Labware labwareA = DataRWDAL.LabwareDB.GetLabware(m_choiceAgoAspirateData.labwareValue);
wellPlate.Rows = labwareA.number_row;
wellPlate.Columns = labwareA.number_column;
tbxWellPositionTips.Text = m_choiceAgoAspirateData.wellarray;
wellPlate.Selection = m_choiceAgoAspirateData.wellarray;
tbxWellvolume.Text = m_choiceAgoAspirateData.wellvolume.ToString();
// 液体
cbLiquidType1.SelectedValue = m_choiceAgoAspirateData.liquididValue1;
cbLiquidRange1.SelectedValue = m_choiceAgoAspirateData.liquidrangeidValue1;
cbLiquid1.SelectedValue = m_choiceAgoAspirateData.liquidpidValue1;
// 开启挑菌前吸液
cbOpenAspirate.IsChecked = m_choiceAgoAspirateData.bEnableBeforeAspirate;
}
else
{
ObservableCollection liquidList = new ObservableCollection();
Liquid liquid = new Liquid();
liquid.liquid_id = string.Empty;
liquid.liquid_name = Properties.Resources.strPleaseSelect;
liquidList.Insert(0, liquid);
cbLiquid1.ItemsSource = liquidList;
cbLiquid1.SelectedIndex = 0;
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 台面位置
private void tbxTablePos_TextChanged(object sender, TextChangedEventArgs e)
{
tbxWellPositionTips.Text = string.Empty;
}
#endregion
#region 开启挑菌前吸液
private void cbOpenAspirate_Click(object sender, RoutedEventArgs e)
{
try
{
m_choiceAgoAspirateData.bEnableBeforeAspirate = (bool)cbOpenAspirate.IsChecked;
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 试剂槽孔位选择变更
private void tbxWellPositionTips_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (m_choiceAgoAspirateData != null)
{
m_choiceAgoAspirateData.wellarray = tbxWellPositionTips.Text;
validationWellPosition();
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
tbxWellPositionTips.BorderBrush = Brushes.Red;
tbxWellPositionTips.BorderThickness = new Thickness(1);
tbkErrorWellPosition.Text = "请先选择孔位";
tbkErrorWellPosition.Foreground = Brushes.Red;
tbkErrorWellPosition.Visibility = Visibility.Visible;
return;
}
}
public void validationWellPosition()
{
string wellString = tbxWellPositionTips.Text;
if (string.IsNullOrEmpty(wellString))
{
tbxWellPositionTips.BorderBrush = Brushes.Red;
tbxWellPositionTips.BorderThickness = new Thickness(1);
tbkErrorWellPosition.Text = "请先选择孔位";
tbkErrorWellPosition.Foreground = Brushes.Red;
tbkErrorWellPosition.Visibility = Visibility.Visible;
return;
}
else if (wellString.Contains("=") && !wellString.Substring(0, 1).Equals("="))
{
tbxWellPositionTips.BorderBrush = Brushes.Red;
tbxWellPositionTips.BorderThickness = new Thickness(1);
tbkErrorWellPosition.Text = "输入的孔位,包含“=”时,格式应为:=i,i为命令前设置的变量名称";
tbkErrorWellPosition.TextWrapping = TextWrapping.WrapWithOverflow;
tbkErrorWellPosition.Foreground = Brushes.Red;
tbkErrorWellPosition.Visibility = Visibility.Visible;
return;
}
else if (wellString.Contains("&") && !wellString.Substring(0, 1).Equals("&"))
{
tbxWellPositionTips.BorderBrush = Brushes.Red;
tbxWellPositionTips.BorderThickness = new Thickness(1);
tbkErrorWellPosition.Text = "输入的孔位,包含“&”时,格式应为:&i,i为命令前设置的变量名称";
tbkErrorWellPosition.TextWrapping = TextWrapping.WrapWithOverflow;
tbkErrorWellPosition.Foreground = Brushes.Red;
tbkErrorWellPosition.Visibility = Visibility.Visible;
return;
}
else if (wellString.Contains(";") || wellString.Contains("|") ||
wellString.Contains("*") || wellString.Contains("!") ||
wellString.Contains("@") || wellString.Contains("#") ||
wellString.Contains("$") || wellString.Contains("%") ||
wellString.Contains("^") || wellString.Contains("(") ||
wellString.Contains(")") || wellString.Contains("{") ||
wellString.Contains("}") || wellString.Contains("[") ||
wellString.Contains("]") || wellString.Contains("?") ||
wellString.Contains("/") || wellString.Contains("\\") ||
wellString.Contains("~") || wellString.Contains("`") ||
wellString.Contains(":") || wellString.Contains("\"") ||
wellString.Contains("'"))
{
tbxWellPositionTips.BorderBrush = Brushes.Red;
tbxWellPositionTips.BorderThickness = new Thickness(1);
tbkErrorWellPosition.Text = "输入的孔位,不能包含“;”、“|”、“*”、“!”、“@”、“#”、“$”、“%”、" +
"“^”、“(”、“)”、“{”、“}”、“[”、“]”、“?”、“/”、“\\”、“~”、" +
"“`”、“:”、“\"”、“'”";
tbkErrorWellPosition.TextWrapping = TextWrapping.WrapWithOverflow;
tbkErrorWellPosition.Foreground = Brushes.Red;
tbkErrorWellPosition.Visibility = Visibility.Visible;
return;
}
else
{
tbxWellPositionTips.BorderBrush = Brushes.Transparent;
tbxWellPositionTips.BorderThickness = new Thickness(0);
tbkErrorWellPosition.Foreground = Brushes.Transparent;
tbkErrorWellPosition.Visibility = Visibility.Hidden;
}
}
#endregion
#region 每孔体积 (μL)
private void tbxWellvolume_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (m_choiceAgoAspirateData != null)
{
m_choiceAgoAspirateData.wellvolume = Convert.ToDouble(tbxWellvolume.Text);
validationWellVolume();
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
tbxWellvolume.BorderBrush = Brushes.Red;
tbkErrorWellVolume.Text = "每孔体积值:[0,1000]之间";
tbkErrorWellVolume.Foreground = Brushes.Red;
tbkErrorWellVolume.Visibility = Visibility.Visible;
return;
}
}
public void validationWellVolume()
{
string volumeString = tbxWellvolume.Text;
Regex rg = new Regex(@"^[1-9]\\d*.\\d*|0\\.\\d*[1-9]\\d*$");
if (string.IsNullOrEmpty(volumeString))
{
tbxWellvolume.BorderBrush = Brushes.Red;
tbkErrorWellVolume.Text = "每孔体积值:[0,1000]之间";
tbkErrorWellVolume.Foreground = Brushes.Red;
tbkErrorWellVolume.Visibility = Visibility.Visible;
return;
}
else if (rg.IsMatch(volumeString))
{
tbxWellvolume.BorderBrush = Brushes.Red;
tbkErrorWellVolume.Text = "每孔体积值:[0,1000]之间";
tbkErrorWellVolume.Foreground = Brushes.Red;
tbkErrorWellVolume.Visibility = Visibility.Visible;
return;
}
else if (Convert.ToDouble(volumeString) < 0 || Convert.ToDouble(volumeString) > 1000)
{
tbxWellvolume.BorderBrush = Brushes.Red;
tbkErrorWellVolume.Text = "[0,1000]之间";
tbkErrorWellVolume.Foreground = Brushes.Red;
tbkErrorWellVolume.Visibility = Visibility.Visible;
return;
}
else
{
tbxWellvolume.BorderBrush = Brushes.Transparent;
tbkErrorWellVolume.Foreground = Brushes.Transparent;
tbkErrorWellVolume.Visibility = Visibility.Hidden;
}
}
#endregion
#region 选择液体类型
private void cbLiquidType1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (mark == 1)
{
if (m_choiceAgoAspirateData != null)
{
m_choiceAgoAspirateData.liquididText1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_name.ToString();
if (m_choiceAgoAspirateData.liquididText1 != "请选择类型")
{
m_choiceAgoAspirateData.liquididValue1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_id.ToString();
}
else
{
m_choiceAgoAspirateData.liquididValue1 = "0";
}
}
}
else
{
if (cbLiquidType1.SelectedIndex < 0)
return;
if (cbLiquidType1.SelectedIndex == 0)
{
cbLiquidRange1.SelectedIndex = 0;
cbLiquid1.SelectedIndex = 0;
}
if (cbLiquidType1.SelectedIndex != 0)
{
m_choiceAgoAspirateData.liquididText1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_name.ToString();
m_choiceAgoAspirateData.liquididValue1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_id.ToString();
}
}
}
#endregion
#region 选择液体范围
private void cbLiquidRange1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string typeID = cbLiquidType1.SelectedValue as string;
string rangeID = cbLiquidRange1.SelectedValue as string;
string armID = m_choiceAgoAspirateData.armValue;
ObservableCollection liquidList = LiquidTypeRSRangeDB.GetLiquidFromdbByTypeAndRange(typeID, rangeID, armID);
Liquid liquid = new Liquid();
liquid.liquid_id = string.Empty;
liquid.liquid_name = Properties.Resources.strPleaseSelect;
liquidList.Insert(0, liquid);
cbLiquid1.ItemsSource = liquidList;
if (mark == 1)
{
if (m_choiceAgoAspirateData != null)
{
if ((LiquidRange)cbLiquidRange1.SelectedItem != null)
{
m_choiceAgoAspirateData.liquidrangeidText1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_name.ToString();
m_choiceAgoAspirateData.liquidrangeidValue1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_id.ToString();
}
}
}
else
{
if (cbLiquidRange1.SelectedIndex < 0)
{
return;
}
if (cbLiquidRange1.SelectedIndex != 0)
{
m_choiceAgoAspirateData.liquidrangeidText1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_name.ToString();
m_choiceAgoAspirateData.liquidrangeidValue1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_id.ToString();
}
}
}
#endregion
#region 选择液体
private void cbLiquid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Liquid liquid = cbLiquid1.SelectedItem as Liquid;
if (liquid != null)
{
m_choiceAgoAspirateData.liquidpidText1 = liquid.liquid_name;
m_choiceAgoAspirateData.liquidpidValue1 = liquid.liquid_id;
}
}
#endregion
#region 私有方法
public void SetTableName(string tableName, Labware lb)
{
if (lb == null)
return;
if (string.IsNullOrEmpty(lb.labware_id))
return;
if (string.IsNullOrEmpty(m_choiceAgoAspirateData.armValue))
{
MessageBox.Show(Properties.Resources.msgPlsSelectArm, "Tips");
return;
}
wellPlate.Rows = lb.number_row;
wellPlate.Columns = lb.number_column;
List latticeList = DataRWDAL.LatticeDB.GetLatticeDataFromdb(Shared.SoftwareInformation.software_device_number, Convert.ToInt32(m_choiceAgoAspirateData.armValue));
Lattice lattice = latticeList.Find(s => s.lattice_num == tableName);
if (lattice == null)
{
LoggerHelper.InfoLog("Error: Can't find lattice with lattice_num=" + tableName);
return;
}
tbxTablePos.Text = tableName;
if (m_choiceAgoAspirateData != null)
{
m_choiceAgoAspirateData.positionText = tableName;
m_choiceAgoAspirateData.positionValue = lattice.lattice_id;
m_choiceAgoAspirateData.labwareText = lb.labware_name;
m_choiceAgoAspirateData.labwareValue = lb.labware_id;
}
}
// 根据挑菌方式,改变页面
public void ChangeDisp(int choiceMode)
{
// 吸液
if (choiceMode == EnumManagement.GetEnumValue(ChoiceModeEnum.AspirateMode))
{
cbOpenAspirate.IsChecked = true;
// 隐藏台面、孔位
tbxTablePosTitle.Visibility = Visibility.Collapsed;
tbxTablePos.Visibility = Visibility.Collapsed;
cbOpenAspirate.Visibility = Visibility.Collapsed;
tbxWellPositionTipsTitle.Visibility = Visibility.Collapsed;
tbxWellPositionTips.Visibility = Visibility.Collapsed;
tbkErrorWellPosition.Visibility = Visibility.Collapsed;
wellPlateSelectTip.Visibility = Visibility.Collapsed;
wellPlate.Visibility = Visibility.Collapsed;
}
else
{
// 显示台面、孔位
tbxTablePosTitle.Visibility = Visibility.Visible;
tbxTablePos.Visibility = Visibility.Visible;
cbOpenAspirate.Visibility = Visibility.Visible;
tbxWellPositionTipsTitle.Visibility = Visibility.Visible;
tbxWellPositionTips.Visibility = Visibility.Visible;
tbkErrorWellPosition.Visibility = Visibility.Visible;
wellPlateSelectTip.Visibility = Visibility.Visible;
wellPlate.Visibility = Visibility.Visible;
}
}
#endregion
}
}