宜昌华友原料库管理软件
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.

462 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>
/// ucQuickQuery.xaml 的交互逻辑
/// </summary>
public partial class ucQuickQuery : UserControl
{
/// <summary>
/// 查询代理
/// </summary>
/// <param name="QueryWhere">获得的查询条件</param>
public delegate void U_QueryEventHandler(string QueryWhere);
/// <summary>
/// 查询事件
/// </summary>
public event U_QueryEventHandler U_Query;
string strTableName = null;
string windowName = null;
IDictionary<string, string> dicQueryPair = 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; }
}
/// <summary>
/// 查询的列和值对
/// </summary>
public IDictionary<string, string> U_QueryPair
{
get { return dicQueryPair; }
set { dicQueryPair = value; }
}
public ucQuickQuery()
{
InitializeComponent();
}
/// <summary>
/// 初始化控件
/// </summary>
public void U_InitControl()
{
try
{
//清空
this.panelQuery.Children.Clear();
//初始化值对
dicQueryPair = new Dictionary<string, string>();
//添加查询控件
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;
//判断控件类型设置显示列样式
foreach (DataRow rowField in queryField)
{
//判断标题是否空
if (!rowField.IsNull("Header") && !String.IsNullOrEmpty(rowField["Header"].ToString()))
{
//判断是否可以快速查询
if (rowField.Table.Columns.Contains("AllowQuery") && !rowField.IsNull("AllowQuery") && rowField["AllowQuery"].ToString() == "1")
{
//判断类型
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.panelQuery.Children.Add(this.panelButton);
}
catch (Exception ex)
{
MainApp._MessageDialog.ShowException(ex);
}
}
#region ------添加查询控件
/// <summary>
/// 添加标题
/// </summary>
private void AddHeader(StackPanel panelItem, string Header)
{
//显示标题
TextBlock txtHeader = new TextBlock();
txtHeader.VerticalAlignment = System.Windows.VerticalAlignment.Center;
panelItem.Children.Add(txtHeader);
//绑定标题
txtHeader.Text = string.Format("{0}:", Header);
}
/// <summary>
/// 添加面板
/// </summary>
private StackPanel AddStackPanel(DataRow rowField)
{
//添加面板
StackPanel panelItem = new StackPanel();
panelItem.Tag = rowField;
panelItem.Margin = new Thickness(5, 1, 5, 1);
panelItem.MinHeight = 21;
panelItem.Orientation = Orientation.Horizontal;
this.panelQuery.Children.Add(panelItem);
return panelItem;
}
/// <summary>
/// 添加文本编辑
/// </summary>
private void AddTextBox(DataRow rowField)
{
//添加面板
StackPanel panelItem = AddStackPanel(rowField);
//显示标题
AddHeader(panelItem, rowField["Header"].ToString());
//添加内容控件
TextBox txtContent = new TextBox();
//txtContent.Style = (Style)MainApp.GetStyleResource("styleDefaultTextBox");
txtContent.Width = 120;
txtContent.Tag = rowField;
txtContent.Margin = new Thickness(5, 0, 5, 0);
txtContent.Text = rowField["DefaultValue"].ToString();
panelItem.Children.Add(txtContent);
}
/// <summary>
/// 添加日期编辑
/// </summary>
private void AddDatePicker(DataRow rowField)
{
//添加面板
StackPanel panelItem = AddStackPanel(rowField);
//显示标题
AddHeader(panelItem, rowField["Header"].ToString());
//添加内容控件
DatePicker dtPicker = new DatePicker();
dtPicker.Tag = rowField;
dtPicker.Margin = new Thickness(5, 0, 5, 0);
panelItem.Children.Add(dtPicker);
}
/// <summary>
/// 添加选中框
/// </summary>
private void AddCheckBox(DataRow rowField)
{
//添加面板
StackPanel panelItem = AddStackPanel(rowField);
//显示标题
AddHeader(panelItem, rowField["Header"].ToString());
//控件定义
CheckBox chkBox = new CheckBox();
chkBox.VerticalAlignment = System.Windows.VerticalAlignment.Center;
chkBox.Tag = rowField;
chkBox.IsThreeState = false;
chkBox.Margin = new Thickness(10, 0, 5, 0);
panelItem.Children.Add(chkBox);
}
/// <summary>
/// 添加选中框
/// </summary>
private void AddComboBox(DataRow rowField)
{
//添加面板
StackPanel panelItem = AddStackPanel(rowField);
//显示标题
AddHeader(panelItem, rowField["Header"].ToString());
//设置内容控件
ComboBox cmb = new ComboBox();
cmb.Tag = rowField;
cmb.Width = 120;
cmb.Height = 21;
cmb.Margin = new Thickness(5, 0, 5, 0);
cmb.DisplayMemberPath = "NAME".ToLower();
cmb.SelectedValuePath = "VALUE".ToLower();
cmb.ItemsSource = new CustomerDescriptions().GetComboBoxDataTable(rowField["DataBind"].ToString()).DefaultView;
cmb.SelectedIndex = -1;
panelItem.Children.Add(cmb);
}
/// <summary>
/// 添加选中框
/// </summary>
private void AddElmentComboBox(DataRow rowField)
{
//添加面板
StackPanel panelItem = AddStackPanel(rowField);
//显示标题
AddHeader(panelItem, rowField["Header"].ToString());
//设置内容控件
ComboBox cmb = new ComboBox();
cmb.Tag = rowField;
cmb.Width = 120;
cmb.Height = 21;
cmb.Margin = new Thickness(5, 0, 5, 0);
panelItem.Children.Add(cmb);
if (!rowField.IsNull("DataBind"))
{
string[] arStr = rowField["DataBind"].ToString().Split('|');
cmb.ItemsSource = arStr;
}
cmb.SelectedIndex = -1;
}
#endregion
/// <summary>
/// 按钮事件
/// </summary>
private void StackPanel_Click(object sender, RoutedEventArgs e)
{
Button btnObj = e.OriginalSource as Button;
if (btnObj != null)
{
switch (btnObj.Name)
{
case "btnOK":
if (this.U_Query != null)
{
string strWhere = U_GetQuery();
this.U_Query(strWhere);
}
break;
case "btnClear":
this.Clear();
break;
}
}
}
/// <summary>
/// 获得查询条件
/// </summary>
public string U_GetQuery()
{
StringBuilder strWhere = new StringBuilder();
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 strValue = string.Empty;
string strAppend = string.Empty;
//判断输入控件的控件类型
if (panelItem.Children[1] is CheckBox)
{
CheckBox chkBox = panelItem.Children[1] as CheckBox;
strValue = Convert.ToInt32(chkBox.IsChecked).ToString();
strAppend = string.Format("{0}='{1}'", rowField["Column"].ToString(), strValue);
strWhere.Append(strWhere.Length == 0 ? strAppend : " AND " + strAppend);
//添加到值对
AddDicPairValue(rowField["Column"].ToString(), strValue.ToString());
}
else if (panelItem.Children[1] is DatePicker)
{
DatePicker dtPicker = panelItem.Children[1] as DatePicker;
if (dtPicker.SelectedDate != null)
{
strValue = Convert.ToDateTime(dtPicker.SelectedDate).ToString("yyyy-MM-dd");
strAppend = GetOperationWhere(rowField, strValue);
strWhere.Append(strWhere.Length == 0 ? strAppend : " AND " + strAppend);
//添加到值对
AddDicPairValue(rowField["Column"].ToString(), strValue);
}
}
else if (panelItem.Children[1] is ComboBox)
{
ComboBox cmb = panelItem.Children[1] as ComboBox;
if (cmb.SelectedValue != null)
{
strValue = cmb.SelectedValue.ToString();
strAppend = GetOperationWhere(rowField, strValue);
strWhere.Append(strWhere.Length == 0 ? strAppend : " AND " + strAppend);
//添加到值对
AddDicPairValue(rowField["Column"].ToString(), strValue);
}
}
else if (panelItem.Children[1] is TextBox)
{
TextBox txt = panelItem.Children[1] as TextBox;
if (!string.IsNullOrEmpty(txt.Text))
{
strValue = txt.Text;
strAppend = GetOperationWhere(rowField, strValue);
strWhere.Append(strWhere.Length == 0 ? strAppend : " AND " + strAppend);
//添加到值对
AddDicPairValue(rowField["Column"].ToString(), strValue);
}
}
}
}
}
return strWhere.ToString().TrimEnd();
}
/// <summary>
/// 添加值对
/// </summary>
private void AddDicPairValue(string key, string value)
{
if (!dicQueryPair.ContainsKey(key))
{
dicQueryPair.Add(key, value);
}
else
{
dicQueryPair[key] = value;
}
}
/// <summary>
/// 获得查询条件
/// </summary>
private string GetOperationWhere(DataRow RowField, string ColumnValue)
{
string strWhere = string.Empty;
string strColumn = RowField["Column"].ToString();
string strQueryOperation = RowField["QueryOperation"].ToString().Trim().ToLower();
if (strQueryOperation == "like")
{
strWhere = string.Format("{0} {1} '%{2}%'", strColumn, strQueryOperation, ColumnValue);
}
else
{
strWhere = string.Format("{0} {1} '{2}'", strColumn, strQueryOperation.Length == 0 ? "=" : strQueryOperation, ColumnValue);
}
return strWhere;
}
/// <summary>
/// 清空重置
/// </summary>
private void Clear()
{
//清除值对
if (dicQueryPair != null)
{
dicQueryPair.Clear();
}
foreach (FrameworkElement element in this.panelQuery.Children)
{
StackPanel panelItem = element as StackPanel;
if (panelItem != null)
{
//判断输入控件的控件类型
if (panelItem.Children[1] is CheckBox)
{
CheckBox chkBox = panelItem.Children[1] as CheckBox;
chkBox.IsChecked = false;
}
else if (panelItem.Children[1] is DatePicker)
{
DatePicker dtPicker = panelItem.Children[1] as DatePicker;
dtPicker.SelectedDate = DateTime.Now;
}
else if (panelItem.Children[1] is ComboBox)
{
ComboBox cmb = panelItem.Children[1] as ComboBox;
cmb.SelectedIndex = -1;
}
else if (panelItem.Children[1] is TextBox)
{
TextBox txt = panelItem.Children[1] as TextBox;
txt.Clear();
}
}
}
}
/// <summary>
/// 添加控件
/// </summary>
public void U_AddControl(UIElement elem)
{
if (elem != null)
{
this.panelQuery.Children.Add(elem);
}
}
}
}