555 lines
18 KiB
C#
555 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using CommonLib.data;
|
|
using CommonLib;
|
|
using DevExpress.XtraGrid.Columns;
|
|
using DevExpress.Utils;
|
|
using DevExpress.XtraGrid.Views.Grid;
|
|
using System.Collections;
|
|
using DevExpress.XtraEditors;
|
|
|
|
namespace Lskj.MyControl.LookUp
|
|
{
|
|
|
|
public partial class FrmMain : FormBase
|
|
{
|
|
|
|
#region 外部属性
|
|
/// <summary>
|
|
/// sql语句
|
|
/// </summary>
|
|
public string SQL { get; set; }
|
|
public string sourceSQL { get; set; }
|
|
/// <summary>
|
|
/// 列集合
|
|
/// </summary>
|
|
public Dictionary<string, string> Columns { get; set; }
|
|
/// <summary>
|
|
/// 选择Value字段
|
|
/// </summary>
|
|
public string ValueField { get; set; }
|
|
/// <summary>
|
|
/// 选择Text字段
|
|
/// </summary>
|
|
public string TextField { get; set; }
|
|
/// <summary>
|
|
/// 是否多选
|
|
/// </summary>
|
|
public bool IsMultiple { get; set; }
|
|
|
|
/// <summary>
|
|
/// 窗体高度
|
|
/// </summary>
|
|
public int WinHeight { get; set; }
|
|
/// <summary>
|
|
/// 窗体宽度
|
|
/// </summary>
|
|
public int WinWidth { get; set; }
|
|
/// <summary>
|
|
/// 返回Value
|
|
/// </summary>
|
|
public string ReturnValue { get; set; }
|
|
/// <summary>
|
|
/// 返回Text
|
|
/// </summary>
|
|
public string ReturnText { get; set; }
|
|
/// <summary>
|
|
/// 窗体标题
|
|
/// </summary>
|
|
public string FrmTitle { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int IsText { get; set; }
|
|
#endregion
|
|
|
|
private IList<string> RText = new List<string>();
|
|
private IList<string> RValue = new List<string>();
|
|
private GridColumnCollection gc;
|
|
private String strWhere = string.Empty;
|
|
private String colStr = String.Empty;
|
|
private DataTable dtSelect;
|
|
private DataTable dtData;
|
|
|
|
public FrmMain()
|
|
{
|
|
InitializeComponent();
|
|
gvMain.CustomDrawRowIndicator += new RowIndicatorCustomDrawEventHandler(gvMain_CustomDrawRowIndicator);
|
|
gvMain.RowCellClick += new RowCellClickEventHandler(gvMain_RowCellClick);
|
|
}
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
base.OnLoad(e);
|
|
if (WinHeight > 0)
|
|
{
|
|
this.Height = WinHeight;
|
|
}
|
|
if (WinWidth > 0)
|
|
{
|
|
this.Width = WinWidth;
|
|
}
|
|
if (!string.IsNullOrEmpty(FrmTitle))
|
|
{
|
|
this.Text = FrmTitle;
|
|
}
|
|
if (!string.IsNullOrEmpty(ReturnText))
|
|
{
|
|
RText = ReturnText.Split(',').ToList();
|
|
}
|
|
if (!string.IsNullOrEmpty(ReturnValue))
|
|
{
|
|
RValue = ReturnValue.Split(',').ToList();
|
|
}
|
|
dtData = SqlHelper.ExecuteDataSet(SQL).Tables[0];
|
|
//绑定列z
|
|
SetColumns(dtData);
|
|
|
|
//绑定选中列
|
|
SetColumns2(dtData);
|
|
//绑定数据源
|
|
gridMain.DataSource = dtData;
|
|
dtSelect = new DataTable();
|
|
dtSelect.Columns.Clear();
|
|
DataColumn dc2 = new DataColumn()
|
|
{
|
|
Caption = "选择",
|
|
DataType = typeof(bool),
|
|
ColumnName = "Id",
|
|
DefaultValue = false
|
|
};
|
|
dtSelect.Columns.Add(dc2);
|
|
foreach (var col in Columns.Keys)
|
|
{
|
|
DataColumn dc = new DataColumn()
|
|
{
|
|
Caption = Columns[col],
|
|
DataType = typeof(String),
|
|
ColumnName = col,
|
|
DefaultValue = ""
|
|
};
|
|
dtSelect.Columns.Add(col);
|
|
}
|
|
gc = new GridColumnCollection(null);
|
|
colStr = "";
|
|
strWhere = "";
|
|
for (int i = 0; i < gvMain.Columns.Count; i++)
|
|
{
|
|
if (gvMain.Columns[i].Caption == "选择")
|
|
continue;
|
|
gc.Add(gvMain.Columns[i]);
|
|
if (i == gvMain.Columns.Count - 1)
|
|
{
|
|
if (ValueField.ToUpper() == gvMain.Columns[i].FieldName.ToUpper())
|
|
{
|
|
strWhere += gvMain.Columns[i].FieldName + " like '%{0}%' ";
|
|
}
|
|
else
|
|
{
|
|
strWhere += "dbo.p_getpy(" + gvMain.Columns[i].FieldName + ") like '%{0}%' or ";
|
|
strWhere += gvMain.Columns[i].FieldName + " like '%{0}%' ";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (ValueField.ToUpper() == gvMain.Columns[i].FieldName.ToUpper())
|
|
{
|
|
strWhere += gvMain.Columns[i].FieldName + " like '%{0}%' or ";
|
|
}
|
|
else
|
|
{
|
|
strWhere += "dbo.p_getpy(" + gvMain.Columns[i].FieldName + ") like '%{0}%' or ";
|
|
strWhere += gvMain.Columns[i].FieldName + " like '%{0}%' or ";
|
|
}
|
|
}
|
|
colStr += gvMain.Columns[i].Caption + "、";
|
|
}
|
|
colStr = "请输入" + colStr.Trim('、');
|
|
txtKey.Text = colStr;
|
|
gvMain.IndicatorWidth = 35;
|
|
if (!IsMultiple)
|
|
{
|
|
int result = gvMain.LocateByValue(TextField, ReturnText, null);
|
|
if (result >= 0)
|
|
{
|
|
gvMain.SelectRow(result);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
selectTextValue();
|
|
}
|
|
if (IsMultiple)
|
|
{
|
|
gbDetail.Visible = true;
|
|
btnDelete.Visible = true;
|
|
gridMain.ContextMenuStrip = contextMenuStrip1;
|
|
}
|
|
else
|
|
{
|
|
gbDetail.Visible = false;
|
|
btnDelete.Visible = false;
|
|
}
|
|
}
|
|
|
|
public void selectTextValue()
|
|
{
|
|
dtSelect.Clear();
|
|
if (IsText == 13)
|
|
{
|
|
for (int i = 0; i < RValue.Count; i++)
|
|
{
|
|
foreach (DataRow row in dtData.Rows)
|
|
{
|
|
if (row[ValueField].ToString().Equals(RValue[i]))
|
|
{
|
|
if (row.RowState != DataRowState.Deleted)
|
|
{
|
|
row["Id"] = true;
|
|
row.AcceptChanges();
|
|
dtSelect.ImportRow(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < RText.Count; i++)
|
|
{
|
|
int result = gvMain.LocateByValue(TextField, RText[i], null);
|
|
if (result >= 0)
|
|
{
|
|
DataRow dr = gvMain.GetDataRow(result);
|
|
if (dr.RowState != DataRowState.Deleted)
|
|
{
|
|
dr["Id"] = true;
|
|
dr.AcceptChanges();
|
|
dtSelect.ImportRow(dr);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
gcSelect.DataSource = dtSelect;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成行号
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void gvMain_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
|
|
{
|
|
e.Appearance.TextOptions.HAlignment = HorzAlignment.Center;
|
|
if (e.Info.IsRowIndicator)
|
|
{
|
|
if (e.RowHandle >= 0)
|
|
{
|
|
e.Info.DisplayText = (e.RowHandle + 1).ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置grid 列
|
|
/// </summary>
|
|
public void SetColumns(DataTable dt)
|
|
{
|
|
gvMain.Columns.Clear();
|
|
if (IsMultiple)
|
|
{
|
|
DataColumn dc = new DataColumn()
|
|
{
|
|
Caption = "选择",
|
|
DataType = typeof(bool),
|
|
ColumnName = "Id",
|
|
DefaultValue = false
|
|
};
|
|
dt.Columns.Add(dc);
|
|
dt.AcceptChanges();
|
|
GridColumn gridColumnCheckBox = new GridColumn();
|
|
gridColumnCheckBox.FieldName = "Id";
|
|
gridColumnCheckBox.Name = "Id";
|
|
gridColumnCheckBox.Caption = "选择";
|
|
gridColumnCheckBox.Width = 40;
|
|
gridColumnCheckBox.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
|
gridColumnCheckBox.Visible = true;
|
|
gvMain.Columns.Add(gridColumnCheckBox);
|
|
}
|
|
foreach (var col in Columns.Keys)
|
|
{
|
|
GridColumn gridColumn = new GridColumn();
|
|
gridColumn.FieldName = col.ToLower();
|
|
gridColumn.Name = col.ToLower();
|
|
gridColumn.Caption = Columns[col];
|
|
gridColumn.Width = 200;
|
|
gridColumn.Visible = true;
|
|
gridColumn.OptionsColumn.AllowEdit = false;
|
|
gridColumn.OptionsColumn.ReadOnly = false;
|
|
gvMain.Columns.Add(gridColumn);
|
|
gvMain.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置grid 列
|
|
/// </summary>
|
|
public void SetColumns2(DataTable dt)
|
|
{
|
|
gvSelect.Columns.Clear();
|
|
foreach (var col in Columns.Keys)
|
|
{
|
|
GridColumn gridColumn = new GridColumn();
|
|
gridColumn.FieldName = col;
|
|
gridColumn.Name = col;
|
|
gridColumn.Caption = Columns[col];
|
|
gridColumn.Width = 200;
|
|
gridColumn.Visible = true;
|
|
gridColumn.OptionsColumn.AllowEdit = false;
|
|
gridColumn.OptionsColumn.ReadOnly = false;
|
|
gvSelect.Columns.Add(gridColumn);
|
|
gvSelect.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 行点击事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void gvMain_RowCellClick(object sender, RowCellClickEventArgs e)
|
|
{
|
|
if (IsMultiple)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
DataRow row = gvMain.GetDataRow(e.RowHandle);
|
|
string id = row["Id"] + "";
|
|
if (id.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1)
|
|
{
|
|
row["Id"] = false;
|
|
//删除不需要再进行判断定位
|
|
//if (gvSelect.LocateByValue(ValueField, row[ValueField], null) >= 0)
|
|
//{
|
|
for (int i = 0; i < dtSelect.Rows.Count; i++)
|
|
{
|
|
DataRow dr = dtSelect.Rows[i];
|
|
if (dr.RowState != DataRowState.Deleted)
|
|
{
|
|
if (dr[ValueField] + "" == row[ValueField] + "")
|
|
{
|
|
dr.Delete();
|
|
}
|
|
}
|
|
}
|
|
gcSelect.DataSource = dtSelect;
|
|
// }
|
|
}
|
|
else
|
|
{
|
|
row["Id"] = true;
|
|
if (gvSelect.LocateByValue(ValueField, row[ValueField], null) >= 0)
|
|
{
|
|
DialogResult dgRlt = XtraMessageBox.Show("抱歉,已经存在?", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
dtSelect.ImportRow(row);
|
|
gcSelect.DataSource = dtSelect;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 搜索数据
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void btnSearch_Click(object sender, EventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(strWhere))
|
|
{
|
|
RValue.Clear();
|
|
RText.Clear();
|
|
foreach (DataRow row in dtSelect.Rows)
|
|
{
|
|
if (row.RowState != DataRowState.Deleted)
|
|
{
|
|
RValue.Add(row[ValueField] + "");
|
|
RText.Add(row[TextField] + "");
|
|
}
|
|
}
|
|
string mysql = String.Format("select * from (" + SQL + ") as tab where " + strWhere, txtKey.Text.Replace(colStr, ""));
|
|
DataTable dt = SqlHelper.ExecuteDataSet(mysql).Tables[0];
|
|
SetColumns(dt);
|
|
gridMain.DataSource = dt;
|
|
selectTextValue();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 关闭窗口
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void btnClose_Click(object sender, EventArgs e)
|
|
{
|
|
this.DialogResult = DialogResult.No;
|
|
}
|
|
/// <summary>
|
|
/// 确定-关闭
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
if (IsMultiple)
|
|
{
|
|
ReturnValue = "";
|
|
ReturnText = "";
|
|
foreach (DataRow row in dtSelect.Rows)
|
|
{
|
|
if (row.RowState != DataRowState.Deleted)
|
|
{
|
|
ReturnValue += row[ValueField] + ",";
|
|
ReturnText += row[TextField] + ",";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int[] rows = gvMain.GetSelectedRows();
|
|
if (rows.Length > 0)
|
|
{
|
|
DataRow row = gvMain.GetDataRow(rows[0]);
|
|
ReturnValue += "'" + row[ValueField] + "',";
|
|
ReturnText += row[TextField] + ",";
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(ReturnValue))
|
|
{
|
|
ReturnValue = ReturnValue.Trim(',');
|
|
}
|
|
if (!string.IsNullOrEmpty(ReturnText))
|
|
{
|
|
ReturnText = ReturnText.Trim(',');
|
|
}
|
|
this.DialogResult = DialogResult.OK;
|
|
}
|
|
|
|
private void txtKey_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (colStr.Equals(txtKey.Text))
|
|
{
|
|
txtKey.Text = "";
|
|
}
|
|
}
|
|
|
|
private void txtKey_Leave(object sender, EventArgs e)
|
|
{
|
|
if (txtKey.Text == "")
|
|
{
|
|
txtKey.Text = colStr;
|
|
}
|
|
}
|
|
|
|
private void txtKey_Enter(object sender, EventArgs e)
|
|
{
|
|
if (colStr.Equals(txtKey.Text))
|
|
{
|
|
txtKey.Text = "";
|
|
}
|
|
}
|
|
|
|
private void btnDelete_Click(object sender, EventArgs e)
|
|
{
|
|
int[] rows = gvSelect.GetSelectedRows();
|
|
if (rows.Length < 1)
|
|
return;
|
|
int currentRow = rows[0];
|
|
if (currentRow > 0)
|
|
currentRow = currentRow - 1;
|
|
|
|
DataRow row = null;
|
|
foreach (int irow in rows)
|
|
{
|
|
row = gvSelect.GetDataRow(irow);
|
|
int mrow = gvMain.LocateByValue(TextField, row[TextField], null);
|
|
if (mrow >= 0)
|
|
{
|
|
DataRow row1 = gvMain.GetDataRow(mrow);
|
|
row1["id"] = false;
|
|
}
|
|
|
|
}
|
|
gvSelect.DeleteSelectedRows();
|
|
gvSelect.SelectRows(currentRow, currentRow);
|
|
}
|
|
|
|
private void 全部选中ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (DataRow row in dtData.Rows)
|
|
{
|
|
if (row.RowState != DataRowState.Deleted)
|
|
{
|
|
if (Convert.ToBoolean(row["Id"]) == false)
|
|
{
|
|
row["Id"] = true;
|
|
row.AcceptChanges();
|
|
dtSelect.ImportRow(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void 全部取消ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (DataRow row in dtData.Rows)
|
|
{
|
|
if (row.RowState != DataRowState.Deleted)
|
|
{
|
|
if (Convert.ToBoolean(row["Id"]) == true)
|
|
{
|
|
row["Id"] = false;
|
|
row.AcceptChanges();
|
|
}
|
|
}
|
|
}
|
|
gvSelect.SelectAll();
|
|
gvSelect.DeleteSelectedRows();
|
|
}
|
|
|
|
private void 反向选择ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (DataRow row in dtData.Rows)
|
|
{
|
|
if (row.RowState != DataRowState.Deleted)
|
|
{
|
|
if (Convert.ToBoolean(row["Id"]) == true)
|
|
{
|
|
row["Id"] = false;
|
|
row.AcceptChanges();
|
|
int tmpRowHandle = gvSelect.LocateByValue(TextField, row[TextField], null);
|
|
if (tmpRowHandle >= 0)
|
|
{
|
|
gvSelect.DeleteRow(tmpRowHandle);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
row["Id"] = true;
|
|
row.AcceptChanges();
|
|
dtSelect.ImportRow(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|