Files
lserp_cs_5.0/插件库/Lskj.MyControl/LookUp/FrmMain.cs
T
2026-07-10 15:25:05 +08:00

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);
}
}
}
}
}
}