巨石化纤
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.

199 lines
8.4 KiB

using SSWMS.Common;
using System;
using System.Data;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace SSWMS.Client
{
public partial class QueryDialog : Window
{
public string U_Where = string.Empty;
public QueryDialog()
{
InitializeComponent();
}
public void U_InitWindow(DataTable dt)
{
try
{
int iRow = 0;
foreach (DataRow rowField in dt.Select("Header<>''"))
{
this.gridControls.RowDefinitions.Add(new RowDefinition
{
Height = GridLength.Auto
});
TextBlock tbTitle = new TextBlock
{
MinWidth = 65,
Margin = new Thickness(5, 0, 2, 0),
VerticalAlignment = VerticalAlignment.Center,
Text = rowField["Header"].ToString()
};
Grid.SetColumn(tbTitle, 0);
Grid.SetRow(tbTitle, iRow);
this.gridControls.Children.Add(tbTitle);
StackPanel panelItem = new StackPanel
{
Tag = rowField["Column"].ToString(),
Margin = new Thickness(10, 2, 10, 2),
Orientation = Orientation.Horizontal
};
panelItem.Children.Add(new ComboBox
{
Width = 65,
Height = 21,
Tag = "CompareOp",
Margin = new Thickness(1),
DisplayMemberPath = "NAME",
SelectedValuePath = "VALUE",
ItemsSource = SystemCodeData.DicDataView["OPERATOR_COMPARE"],
SelectedIndex = 0
});
string sControlType = rowField["Control"].ToString();
switch (sControlType)
{
case "CheckBox":
panelItem.Children.Add(new CheckBox
{
VerticalAlignment = VerticalAlignment.Center,
Width = 150,
IsThreeState = false,
Margin = new Thickness(10, 2, 5, 2)
});
break;
case "TextBox":
panelItem.Children.Add(new TextBox
{
Style = Application.Current.Resources["styleDefaultTextBox"] as Style,
Width = 150,
Margin = new Thickness(10, 2, 5, 2)
});
break;
default:
panelItem.Children.Add(new ComboBox
{
Width = 150,
Height = 21,
Margin = new Thickness(10, 2, 5, 2),
DisplayMemberPath = "NAME",
SelectedValuePath = "VALUE",
ItemsSource = SystemCodeData.DicDataView[sControlType],
SelectedIndex = -1
});
break;
}
panelItem.Children.Add(new ComboBox
{
Width = 60,
Height = 21,
Tag = "LogicOp",
Margin = new Thickness(1),
DisplayMemberPath = "NAME",
SelectedValuePath = "VALUE",
ItemsSource = SystemCodeData.DicDataView["OPERATOR_LOGICAL"],
SelectedIndex = 0
});
Grid.SetColumn(panelItem, 1);
Grid.SetRow(panelItem, iRow);
this.gridControls.Children.Add(panelItem);
++iRow;
}
}
catch (Exception ex)
{
MessageDialog.ShowException(ex);
}
}
private void WrapPanel_Click(object sender, RoutedEventArgs e)
{
Button b = e.OriginalSource as Button;
switch (b.Name)
{
case "bOK":
StringBuilder sbAnd = new StringBuilder();
StringBuilder sbOr = new StringBuilder();
sbAnd.Append("1=1");
sbOr.Append("1<>1");
foreach (UIElement uie in this.gridControls.Children)
{
StackPanel sp = uie as StackPanel;
if (sp != null)
{
string sValue = string.Empty;
if (sp.Children[1] is CheckBox)
{
CheckBox cb = sp.Children[1] as CheckBox;
sValue = Convert.ToInt32(cb.IsChecked).ToString();
}
else if (sp.Children[1] is ComboBox)
{
ComboBox cb = sp.Children[1] as ComboBox;
if (cb.SelectedIndex > -1)
{
sValue = cb.SelectedValue.ToString();
}
}
else if (sp.Children[1] is TextBox)
{
TextBox tb = sp.Children[1] as TextBox;
if (!string.IsNullOrEmpty(tb.Text))
{
sValue = tb.Text;
}
}
string sColumn = sp.Tag as string;
string sCompare = (sp.Children[0] as ComboBox).SelectedValue.ToString();
string sExpression = string.Empty;
if (sCompare == SystemCode.OPERATOR.IsNull ||
sCompare == SystemCode.OPERATOR.IsNotNull)
{
sExpression = string.Format("{0} {1}", sColumn, sCompare);
}
else if (sCompare == SystemCode.OPERATOR.Between)
{
string[] asValue = sValue.Split('-');
if (asValue.Length != 2)
{
continue;
}
sExpression = string.Format("{0} between '{1}' and '{2}'", sColumn, asValue[0], asValue[1]);
}
else
{
if (string.IsNullOrWhiteSpace(sValue))
{
continue;
}
sExpression = string.Format("{0} {1} '{2}'", sColumn, sCompare,
sCompare == SystemCode.OPERATOR.Like ||
sCompare == SystemCode.OPERATOR.NotLike ? "%" + sValue + "%" : sValue);
}
if ((sp.Children[2] as ComboBox).SelectedValue.ToString() == SystemCode.OPERATOR.And)
{
sbAnd.Append(string.Format(" and {0}", sExpression));
}
else
{
sbOr.Append(string.Format(" or {0}", sExpression));
}
}
}
if (sbOr.Length > 5)
{
sbAnd.Append(" and (" + sbOr.ToString() + ")");
}
this.U_Where = sbAnd.ToString();
this.DialogResult = true;
break;
}
this.Close();
}
}
}