You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
447 lines
16 KiB
447 lines
16 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
|
|
using System.Data;
|
|
|
|
namespace SiaSun.LMS.WPFClient.UC
|
|
{
|
|
/// <summary>
|
|
/// ucQuery.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class ucQuery : UserControl
|
|
{
|
|
IList<Model.SYS_ITEM_LIST> listCompareOp;
|
|
IList<Model.SYS_ITEM_LIST> listLogicOp;
|
|
|
|
string strTableName = null;
|
|
string windowName = null;
|
|
|
|
/// <summary>
|
|
/// 关联XML表名
|
|
/// </summary>
|
|
public string U_XmlTableName
|
|
{
|
|
get { return strTableName; }
|
|
set { strTableName = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 关联窗体名称
|
|
/// </summary>
|
|
public string U_WindowName
|
|
{
|
|
get { return windowName; }
|
|
set { windowName = value; }
|
|
}
|
|
|
|
public ucQuery()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化控件
|
|
/// </summary>
|
|
public void U_InitControl()
|
|
{
|
|
try
|
|
{
|
|
//获得操作符号列表
|
|
this.listCompareOp = MainApp._I_SystemService.ITEM_LIST_GetList_ITEM_CODE("CompareOperation");
|
|
this.listLogicOp = MainApp._I_SystemService.ITEM_LIST_GetList_ITEM_CODE("LogicalOperation");
|
|
|
|
//添加查询控件
|
|
CustomerDescriptions cusDescription = new CustomerDescriptions();
|
|
using (DataTable tableFieldDescription = string.IsNullOrEmpty(windowName) ? cusDescription.GetStyleDataTable(strTableName) : cusDescription.GetFormStyleDataTable(windowName, strTableName))
|
|
{
|
|
//根据序号排序并添加列显示
|
|
DataRow[] arRowField = tableFieldDescription.Rows.Cast<DataRow>().ToArray<DataRow>();
|
|
var queryField = from row in arRowField orderby Convert.ToInt32(row["Order"].ToString()) select row;
|
|
|
|
//开始初始化
|
|
this.BeginInit();
|
|
|
|
//判断控件类型设置显示列样式
|
|
foreach (DataRow rowField in queryField)
|
|
{
|
|
if (!rowField.IsNull("Header") && !String.IsNullOrEmpty(rowField["Header"].ToString()))
|
|
{
|
|
//判断类型
|
|
switch (rowField["ControlType"].ToString().ToLower())
|
|
{
|
|
case "checkbox":
|
|
this.AddCheckBox(rowField);
|
|
break;
|
|
case "combobox":
|
|
this.AddComboBox(rowField);
|
|
break;
|
|
case "elementcombox":
|
|
this.AddElmentComboBox(rowField);
|
|
break;
|
|
case "datetimepicker":
|
|
this.AddDatePicker(rowField);
|
|
break;
|
|
default:
|
|
this.AddTextBox(rowField);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
//结束初始化
|
|
this.EndInit();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MainApp._MessageDialog.ShowException(ex);
|
|
}
|
|
}
|
|
|
|
|
|
#region ------添加查询控件
|
|
|
|
/// <summary>
|
|
/// 添加比较操作符号
|
|
/// </summary>
|
|
private void AddCompareOp(StackPanel panelItem)
|
|
{
|
|
ComboBox cmbOp = new ComboBox();
|
|
cmbOp.Width = 65;
|
|
cmbOp.Tag = "CompareOp";
|
|
cmbOp.Margin = new Thickness(1);
|
|
panelItem.Children.Add(cmbOp);
|
|
|
|
cmbOp.DisplayMemberPath = "ITEM_LIST_NAME";
|
|
cmbOp.SelectedValuePath = "ITEM_LIST_CODE";
|
|
cmbOp.ItemsSource = this.listCompareOp;
|
|
cmbOp.SelectedIndex = 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加逻辑操作符号
|
|
/// </summary>
|
|
private void AddLogicOp(StackPanel panelItem)
|
|
{
|
|
ComboBox cmbOp = new ComboBox();
|
|
cmbOp.Width = 60;
|
|
cmbOp.Tag = "LogicOp";
|
|
cmbOp.Margin = new Thickness(1);
|
|
panelItem.Children.Add(cmbOp);
|
|
|
|
cmbOp.DisplayMemberPath = "ITEM_LIST_NAME";
|
|
cmbOp.SelectedValuePath = "ITEM_LIST_CODE";
|
|
cmbOp.ItemsSource = this.listLogicOp;
|
|
cmbOp.SelectedIndex = 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加面板
|
|
/// </summary>
|
|
private StackPanel AddStackPanel(DataRow rowField)
|
|
{
|
|
//添加面板
|
|
StackPanel panelItem = new StackPanel();
|
|
panelItem.Tag = rowField;
|
|
panelItem.Margin = new Thickness(10,1,10,1);
|
|
panelItem.Orientation = Orientation.Horizontal;
|
|
this.panelQuery.Children.Add(panelItem);
|
|
|
|
//添加分割线
|
|
Separator spr = new Separator();
|
|
spr.Style = MainApp.GetStyleResource("styleDefaltSeparator") as Style;
|
|
spr.Height = 2;
|
|
spr.Margin = new Thickness(5, 1, 5, 1);
|
|
this.panelQuery.Children.Add(spr);
|
|
return panelItem;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加标题
|
|
/// </summary>
|
|
private void AddHeader(StackPanel panelItem,string Header)
|
|
{
|
|
//显示标题
|
|
TextBlock txtHeader = new TextBlock();
|
|
txtHeader.Width = 100;
|
|
txtHeader.VerticalAlignment = System.Windows.VerticalAlignment.Center;
|
|
panelItem.Children.Add(txtHeader);
|
|
|
|
//绑定标题
|
|
txtHeader.Text = string.Format("{0}:",Header);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加文本编辑
|
|
/// </summary>
|
|
private void AddTextBox(DataRow rowField)
|
|
{
|
|
//添加面板
|
|
StackPanel panelItem = this.AddStackPanel(rowField);
|
|
|
|
//显示标题
|
|
AddHeader(panelItem, rowField["Header"].ToString());
|
|
|
|
//添加操作符号
|
|
this.AddCompareOp(panelItem);
|
|
|
|
//添加内容控件
|
|
TextBox txtContent = new TextBox();
|
|
txtContent.Style = (Style)MainApp.GetStyleResource("styleDefaultTextBox");
|
|
txtContent.Width = 150;
|
|
txtContent.Tag = rowField;
|
|
txtContent.Margin = new Thickness(10, 2, 5, 2);
|
|
panelItem.Children.Add(txtContent);
|
|
|
|
//添加逻辑符号
|
|
this.AddLogicOp(panelItem);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加日期编辑
|
|
/// </summary>
|
|
private void AddDatePicker(DataRow rowField)
|
|
{
|
|
//添加面板
|
|
StackPanel panelItem = this.AddStackPanel(rowField);
|
|
|
|
//显示标题
|
|
AddHeader(panelItem, rowField["Header"].ToString());
|
|
|
|
//添加操作符号
|
|
this.AddCompareOp(panelItem);
|
|
|
|
//添加内容控件
|
|
DatePicker dtPicker = new DatePicker();
|
|
dtPicker.Width = 150;
|
|
dtPicker.Tag = rowField;
|
|
dtPicker.Margin = new Thickness(10, 2, 5, 2);
|
|
panelItem.Children.Add(dtPicker);
|
|
|
|
//添加逻辑符号
|
|
this.AddLogicOp(panelItem);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加选中框
|
|
/// </summary>
|
|
private void AddCheckBox(DataRow rowField)
|
|
{
|
|
//添加面板
|
|
StackPanel panelItem = this.AddStackPanel(rowField);
|
|
|
|
//显示标题
|
|
AddHeader(panelItem, rowField["Header"].ToString());
|
|
|
|
//添加操作符号
|
|
this.AddCompareOp(panelItem);
|
|
|
|
//控件定义
|
|
CheckBox chkBox = new CheckBox();
|
|
chkBox.VerticalAlignment = System.Windows.VerticalAlignment.Center;
|
|
chkBox.Width = 150;
|
|
chkBox.Tag = rowField;
|
|
chkBox.IsThreeState = false;
|
|
chkBox.Margin = new Thickness(10, 2, 5, 2);
|
|
panelItem.Children.Add(chkBox);
|
|
|
|
//添加逻辑符号
|
|
this.AddLogicOp(panelItem);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加选中框
|
|
/// </summary>
|
|
private void AddComboBox(DataRow rowField)
|
|
{
|
|
//添加面板
|
|
StackPanel panelItem = this.AddStackPanel(rowField);
|
|
|
|
//显示标题
|
|
AddHeader(panelItem, rowField["Header"].ToString());
|
|
|
|
//添加操作符号
|
|
this.AddCompareOp(panelItem);
|
|
|
|
//设置内容控件
|
|
ComboBox cmb = new ComboBox();
|
|
cmb.Tag = rowField;
|
|
cmb.Width = 150;
|
|
cmb.Height = 21;
|
|
cmb.Margin = new Thickness(10, 2, 5, 2);
|
|
cmb.DisplayMemberPath = "NAME".ToLower();
|
|
cmb.SelectedValuePath = "VALUE".ToLower();
|
|
cmb.ItemsSource = new CustomerDescriptions().GetComboBoxDataTable(rowField["DataBind"].ToString()).DefaultView;
|
|
cmb.SelectedIndex = -1;
|
|
panelItem.Children.Add(cmb);
|
|
|
|
//添加逻辑符号
|
|
this.AddLogicOp(panelItem);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加选中框
|
|
/// </summary>
|
|
private void AddElmentComboBox(DataRow rowField)
|
|
{
|
|
//添加面板
|
|
StackPanel panelItem = this.AddStackPanel(rowField);
|
|
|
|
//显示标题
|
|
AddHeader(panelItem, rowField["Header"].ToString());
|
|
|
|
//添加操作符号
|
|
this.AddCompareOp(panelItem);
|
|
|
|
//设置内容控件
|
|
ComboBox cmb = new ComboBox();
|
|
cmb.Width = 150;
|
|
cmb.Height = 21;
|
|
cmb.Tag = rowField;
|
|
cmb.Margin = new Thickness(10, 2, 5, 2);
|
|
panelItem.Children.Add(cmb);
|
|
if (!rowField.IsNull("DataBind"))
|
|
{
|
|
string[] arStr = rowField["DataBind"].ToString().Split('|');
|
|
cmb.ItemsSource = arStr;
|
|
}
|
|
cmb.SelectedIndex = -1;
|
|
|
|
//添加逻辑符号
|
|
this.AddLogicOp(panelItem);
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 获得查询条件
|
|
/// </summary>
|
|
public string U_GetQueryWhere()
|
|
{
|
|
//查询对象集合
|
|
IList<SiaSun.LMS.Model.QueryObject> listQueryObject = new List<SiaSun.LMS.Model.QueryObject>();
|
|
|
|
foreach (FrameworkElement element in this.panelQuery.Children)
|
|
{
|
|
StackPanel panelItem = element as StackPanel;
|
|
if (panelItem != null)
|
|
{
|
|
DataRow rowField = element.Tag as DataRow;
|
|
if (rowField != null)
|
|
{
|
|
string strColumn = rowField["Column"].ToString();
|
|
string strControlType = rowField["ControlType"].ToString().TrimEnd();
|
|
string strCompareOperation = (panelItem.Children[1] as ComboBox).SelectedValue.ToString();
|
|
string strLogicalOperation = (panelItem.Children[3] as ComboBox).SelectedValue.ToString();
|
|
string strValue = string.Empty;
|
|
|
|
//判断输入控件的控件类型
|
|
if (panelItem.Children[2] is CheckBox)
|
|
{
|
|
CheckBox chkBox = panelItem.Children[2] as CheckBox;
|
|
strValue = Convert.ToInt32(chkBox.IsChecked).ToString();
|
|
listQueryObject.Add(GetQueryObject(strColumn, strCompareOperation, strValue, strLogicalOperation));
|
|
}
|
|
else if (panelItem.Children[2] is DatePicker)
|
|
{
|
|
DatePicker dtPicker = panelItem.Children[2] as DatePicker;
|
|
if (dtPicker.SelectedDate != null || (strCompareOperation.Contains("NULL")) || (strCompareOperation.Contains("LIKE")))
|
|
{
|
|
strValue = Convert.ToDateTime(dtPicker.SelectedDate).ToString("yyyy-MM-dd");
|
|
listQueryObject.Add(GetQueryObject(strColumn, strCompareOperation, strValue, strLogicalOperation));
|
|
}
|
|
}
|
|
else if (panelItem.Children[2] is ComboBox)
|
|
{
|
|
ComboBox cmb = panelItem.Children[2] as ComboBox;
|
|
if (cmb.SelectedValue != null || (strCompareOperation.Contains("NULL")) || (strCompareOperation.Contains("LIKE")))
|
|
{
|
|
strValue = cmb.SelectedValue.ToString();
|
|
listQueryObject.Add(GetQueryObject(strColumn, strCompareOperation, strValue, strLogicalOperation));
|
|
}
|
|
}
|
|
else if(panelItem.Children[2] is TextBox)
|
|
{
|
|
TextBox txt = panelItem.Children[2] as TextBox;
|
|
if (!string.IsNullOrEmpty(txt.Text) || (strCompareOperation.Contains("NULL")) || (strCompareOperation.Contains("LIKE")))
|
|
{
|
|
strValue = txt.Text;
|
|
listQueryObject.Add(GetQueryObject(strColumn, strCompareOperation, strValue, strLogicalOperation));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return GetWhere(listQueryObject);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获得查询对象
|
|
/// </summary>
|
|
private SiaSun.LMS.Model.QueryObject GetQueryObject(string Column, string Operation, string Value, string Logic)
|
|
{
|
|
SiaSun.LMS.Model.QueryObject queryObj = new SiaSun.LMS.Model.QueryObject();
|
|
queryObj.Column = Column;
|
|
queryObj.Operation = Operation;
|
|
queryObj.Value = Value;
|
|
queryObj.Logic = Logic;
|
|
return queryObj;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获得条件
|
|
/// </summary>
|
|
private string GetWhere(IList<SiaSun.LMS.Model.QueryObject> QueryObjectList)
|
|
{
|
|
StringBuilder strbWhere = new StringBuilder();
|
|
|
|
for (int i = 0; i < QueryObjectList.Count; i++)
|
|
{
|
|
SiaSun.LMS.Model.QueryObject queryObj = QueryObjectList[i];
|
|
string Column = queryObj.Column;
|
|
string Operation = queryObj.Operation;
|
|
string Value = queryObj.Value;
|
|
string Logic = (i == (QueryObjectList.Count - 1)) ? string.Empty : queryObj.Logic;
|
|
//判断查询操作符号
|
|
switch (queryObj.Operation.ToUpper())
|
|
{
|
|
case "LIKE":
|
|
case "NOT LIKE":
|
|
strbWhere.Append(string.Format(" ({0} {1} '%{2}%') {3} ", Column, Operation, Value, Logic));
|
|
break;
|
|
case "IS NULL":
|
|
case "IS NOT NULL":
|
|
strbWhere.Append(string.Format(" ({0} {1}) {2} ", Column, Operation, Logic));
|
|
break;
|
|
case "NVL":
|
|
strbWhere.Append(string.Format("({0}({1},{2})='{2}') {3}", Operation, Column, Value, Logic));
|
|
break;
|
|
case "BETWEEN":
|
|
string[] arStrFromTo = Value.Split('-');
|
|
if (arStrFromTo.Length == 2)
|
|
{
|
|
strbWhere.Append(string.Format("({0} {1} '{2}' AND '{3}') {4}", Column, Operation, arStrFromTo[0], arStrFromTo[1], Logic));
|
|
}
|
|
break;
|
|
default:
|
|
strbWhere.Append(string.Format(" ({0}{1}'{2}') {3} ", Column, Operation, Value, Logic));
|
|
break;
|
|
}
|
|
}
|
|
|
|
return strbWhere.ToString();
|
|
}
|
|
|
|
}
|
|
}
|