本人大菜鸟一枚……
DataGridView我已经绑定了数据库,因此在其中显示的是数据库中的内容,我现在想的是:设置一个textbox1(用于输入查询的文字),一个combobox1(用于限定查询的种类:例如不限、学生、教师……)和一个button1用于确定开始查询,那么我应该如何实现呢
DataGridView我已经绑定了数据库,因此在其中显示的是数据库中的内容,我现在想的是:设置一个textbox1(用于输入查询的文字),一个combobox1(用于限定查询的种类:例如不限、学生、教师……)和一个button1用于确定开始查询,那么我应该如何实现呢
有6列,我想查询的是包含textbox1输入的字符的所有行,当然列也要显示出来
>.< 本人新手,想看看代码实例,劳烦您了
查找方法:
public static int RowCount = 0;
///记录已查找过的行数
public static int SetGetRow
{
set
{
if (RowCount != value) { RowCount = value; }
}
get { return RowCount; }
}
/// <summary>
/// 查找相
/// </summary>
/// <param name="_FindName">要查找的字符串内容 </param>
/// <param name="_Gr">要查找的表格名称 </param>
public void Find_Grid(string _FindName, DataGridView _Gr)
{
if (_FindName != "")
{
if (_Gr.Rows.Count > 0)
{
_FindName = _FindName.ToUpper().Trim(); int row = _Gr.Rows.Count;//得到总行数
int cell = _Gr.Rows[1].Cells.Count;//得到总列数
int _length = _FindName.Trim().Length;
for (int i = SetGetRow; i < row; i++)//得到总行数并在之内循环
{
for (int j = 0; j < cell; j++)//得到总列数并在之内循环
{ //精确查找定位
if (_FindName.Trim().ToUpper() == _Gr.Rows[i].Cells[j].Value.ToString().Trim().ToUpper())
{ //对比TexBox中的值是否与dataGridView中的值相同(上面这句)
_Gr.CurrentCell = _Gr[j, i];//定位到相同的单元格
_Gr.Rows[i].Selected = true;//定位到行
SetGetRow = i + 1; return;//返回
} //模糊查找定位(连续长度相同才认为是相似) /*************模糊查找定位算法 * 从1到对应的表格内容长度查找 * 先找到第一个字符与要查找的内容对应的第一个字符相同的然后查找后面的相同长度的内容是否相同,相同则定位到此行 */
for (int k = 0; k < _Gr.Rows[i].Cells[j].Value.ToString().Trim().Length; k++)
{
if (_length <= _Gr.Rows[i].Cells[j].Value.ToString().Trim().Length - k)//判断要查找内容的长度是否小于对比的内容的长度
{
if (_FindName.Trim().Substring(0, 1) == _Gr.Rows[i].Cells[j].Value.ToString().Trim().Substring(k, 1))//判断第一个字符是否与要对比的内容的第一个字符相同
{
if (_FindName.Trim() == _Gr.Rows[i].Cells[j].Value.ToString().Trim().Substring(k, _length))//判断是查找内容与对比内容否相等
{
_Gr.CurrentCell = _Gr[j, i];//定位到相同的单元格
_Gr.Rows[i].Selected = true;//定位到行
SetGetRow = i + 1; return;//返回
}
}
}
}
}
}
SetGetRow = 0;
MessageBox.Show("没有找到相关记录!", "快速定位", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
} }
DataTable copytable = DataTable.Clone();
for (int i = 0; i <= row.Length - 1; i++)
{
copytable.ImportRow((DataRow)row[i]);
}在用copytable绑定DataGridView
DataTable dt = new DataTable();
dt.Select("", "");
DataTable dtbl = new DataTable();
SqlDataAdapter sda = ....;
sda.Fill(dtbl);
就声明一个 DataTable 全局变量,把查询结果赋值给这个全局变量,然后 button1 的事件里就
DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'");
DataTable ndtbl = 全局变量DataTable.Clone();
for (int i = 0; i < drs.Length; i++)
{
ndtbl.ImportRow(drs[i]);
}还是那个问题 combobox1 限定的什么?
例如我textbox1里输入张三,combobox1里就是选择额外的查询条件(在另外一列中)如“学生”“教师”,combobox为空的时候也能查询
改为
DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'" + (combobox.SelectedText != null ? ("另一列名 = '" + combobox.SelectedText + "'") : null));