开发项目的时候,查询功能是一个比较常见的功能,对于简单的查询功能,一般都是在当前页面新加一个查询页面(或区域)来实现。而对于复杂的或者是综合查询功能,有二种可以实现的办法,一种是如简单查询一样,在每个页面单独显示,这样可以对每个综合查询进行独立定制,比较直观,也比较友好,但重复量大,页面可能会增加很多页面,对于系统维护来说,这不是一个好的选择。第二种就是提供一种每个页面都可以用或者是绝大部分页面都适用的综合查询自定义用户控件。以下就是用C#开发的综合查询自定义用户控件,是用VS2005开发的。首先把整体界面先给出来。

说明:最上面一排分别表示,第一个单元格显示要查询的字段,该字段由可以由DataGridView等得来,第二个单元格为比较参数,如大于,小于,等于等第三个单元格为输入框,第四个单元格为逻辑参数,如且与或。点击添加时根据前面四个单元格的内容组合成一条查询语句插入到下面的DataGridView中。删除功能就是删除一个查询SQL语句,确定时把查询条件返回(也可以返回一个SQL语句)。
该优点是可以实现只需要传入一个SQL语句和一个DataGridView就可以实现查询,及显示相应的查询内容了。
主要源代码如下:

Code

Prority#region Prority

public DataGridView DGW_Query

{
get

{
return dg;
}
set

{
dg = value;
}
}

public DataSet DS_Query

{
set

{
DS_Query = value;
}
}

public string SQL_Query

{
get

{
return return_sql;
}
set

{
_sql = value;
}
}

public string LS_SQL

{
get

{
return ls_sql;
}
}

#endregion


方法#region 方法

/**//// <summary>
/// 添加
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAddNew_Click(object sender, EventArgs e)

{
this.btnDel.Enabled = true;
string column = cmb_column.Text.ToString();
string compare = cmb_compare.Text.ToString();
string logic = cmb_logic.Text.ToString();
string columnValue = cmb_column.SelectedValue.ToString();
string name = "";
string value;
string sql;
if (txtValue.Visible)//文本框

{
value = (txtValue.Text.Trim().ToString().Length == 0) ? "" : txtValue.Text.Trim().ToString();
if (value == "")

{
MessageBox.Show("值不能为空,请输入!");
txtValue.Focus();
return;
}

if (cmb_compare.SelectedValue.ToString() == "like")

{
sql = "LOWER(" + columnValue + ")" + " " + cmb_compare.SelectedValue + " '%" + value.ToLower() + "%'";
}
else

{
sql = "LOWER(" + columnValue + ")" + " " + cmb_compare.SelectedValue + " '" + value.ToLower() + "'";
}

dataGridView.Rows.Add(column, compare, value, logic, name, sql);

txtValue.Text = "";
}
else//是下拉框时

{
value = cmbValue.Text;//下拉列表当前文本
name = cmbValue.SelectedValue.ToString();//下拉当前值
sql = columnValue + " " + cmb_compare.SelectedValue + " '" + name + "'";

dataGridView.Rows.Add(column, compare, value, logic, name, sql);
}
}


/**//// <summary>
/// 删除当前行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDel_Click(object sender, EventArgs e)

{
//移除当前行

if (dataGridView.Rows.Count >0)

{
if (dataGridView.CurrentRow != null)

{
dataGridView.Rows.Remove(dataGridView.CurrentRow);
}
}
//判断DataGridView中是否有数据,若无数据则设置删除按键Enabled = false
if (dataGridView.Rows.Count == 0)

{
btnDel.Enabled = false;
}
}

/**//// <summary>
/// 确定
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOK_Click(object sender, EventArgs e)

{
return_sql = _sql;

int rowcount = dataGridView.Rows.Count;
string txtValue;

if (rowcount == 0)

{
buttonDialogResult = DialogResult.OK;
return;
}

try

{
while (dataGridView.Rows[rowcount - 1].Cells["dg_column"].Value == null)

{
if (rowcount > 1)

{
rowcount--;
}
else

{
return;
}
}


if (rowcount > 0)

{
for (int i = 0; i < rowcount; i++)

{
if (i == rowcount - 1)

{
ls_sql += dataGridView.Rows[i].Cells["dg_sql"].Value.ToString();
}
else

{
string logic = dataGridView.Rows[i].Cells["dg_logic"].Value.ToString();
if (logic == "并且")

{
ls_sql += dataGridView.Rows[i].Cells["dg_sql"].Value.ToString() + " and ";
}
if (logic == "或")

{
ls_sql += dataGridView.Rows[i].Cells["dg_sql"].Value.ToString() + " or ";
}
}
}
}

if (ls_sql != "")

{
ls_sql = "( " + ls_sql + " )";
int index = return_sql.ToLower().IndexOf("where");

if (index >= 0)

{
return_sql += " and " + ls_sql;
}
else

{
return_sql += " where " + ls_sql;
}

}
else

{
}

}
catch (Exception ex)

{
MessageBox.Show(ex.Message);
}
finally

{
buttonDialogResult = DialogResult.OK;
this.Close();
}

}


/**//// <summary>
/// 取消
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCancel_Click(object sender, EventArgs e)

{
buttonDialogResult = DialogResult.None;
//this.Close();
}

#endregion
以上是以前开发的写的,在些也不多说了,有什么问题可以留言,谢谢
说明:最上面一排分别表示,第一个单元格显示要查询的字段,该字段由可以由DataGridView等得来,第二个单元格为比较参数,如大于,小于,等于等第三个单元格为输入框,第四个单元格为逻辑参数,如且与或。点击添加时根据前面四个单元格的内容组合成一条查询语句插入到下面的DataGridView中。删除功能就是删除一个查询SQL语句,确定时把查询条件返回(也可以返回一个SQL语句)。
该优点是可以实现只需要传入一个SQL语句和一个DataGridView就可以实现查询,及显示相应的查询内容了。
主要源代码如下:


















































































































































































































































































































以上是以前开发的写的,在些也不多说了,有什么问题可以留言,谢谢