public partial class stusearchinfo : Form
    {
        int firsttime = 0;
        DataSet ds;
        public stusearchinfo()
        {
           
            InitializeComponent();
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            this.dataGridView1.Top = this.textBox1.Top + this.textBox1.Height;            if (firsttime == 0)
            {
                firsttime = 1;
                getData();
            }            if (textBox1.Text ==" ")
            {
                if (ds.Tables[0].DefaultView.Count != 0)
                    dataGridView1.Visible = true;
            }            ds.Tables[0].DefaultView.RowFilter = "学号 like'" + textBox1.Text.Trim() + "%'";            if (ds.Tables[0].DefaultView.Count != 0)
            {
                dataGridView1.Visible = true;
                dataGridView1.CurrentCell = dataGridView1[0, 0];
            }            if(ds.Tables[0].DefaultView.Count == 0)
                dataGridView1.Visible =false; 
        }        private void getData()
        {
            SqlConnection cmd11 = new SqlConnection("data source = 127.0.0.1;uid=sa;pwd=123;initial catalog=REMIS");
           try
            {
                cmd11.Open();
                SqlDataAdapter da = new SqlDataAdapter("SELECT bh AS '学号', xm AS '姓名', khks AS '考核科室', rksj AS '入科时间', cksj AS '出科时间',kspd AS '科室评定', llcj AS '理论成绩', blcj AS '病历书写成绩', jnpf AS '操作技能评分', bz AS '备注' FROM dbo.sxscj", cmd11);
                ds = new DataSet();
                da.Fill(ds);
            }
             catch (Exception ex)
            {
                MessageBox.Show("error!" + ex.ToString());
                Application.Exit();
            }
            finally
            {
                cmd11.Close();            }
            this.dataGridView1.DataSource = ds.Tables[0].DefaultView;        }        private void dataGridView1_DoubleClick(object sender, EventArgs e)
        {
            this.textBox1.Text = this.dataGridView1.CurrentCell.Value.ToString();
            this.dataGridView1.Visible = false;
        }        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.textBox1.Text = this.dataGridView1.CurrentCell.Value.ToString();
                this.dataGridView1.Visible = false;
            }
        }        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                dataGridView1.Focus();
                if (dataGridView1.CurrentRow.Index + 1 < dataGridView1.Rows.Count)
                {
                    dataGridView1.CurrentCell = dataGridView1[0, dataGridView1.CurrentRow.Index + 1];
                }
            }            if (e.KeyCode == Keys.Enter)
            {
                this.textBox1.Text = this.dataGridView1.CurrentCell.Value.ToString();
                this.dataGridView1.Visible = false;
            }
        }        private void stusearchinfo_Load(object sender, EventArgs e)
        {        }        private void fillToolStripButton_Click(object sender, EventArgs e)
        {
            try
            {
                this.sxscjTableAdapter.Fill(this.searchgradeview.sxscj);
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }        }        }
这个事关于在一个textbox里面输入一个学生编号(数据库里为int型)来取自datagradview的数据进行显示,在我输入的时候出现这个错误:无法在 System.Int32 和 System.String 上执行“Like”操作。
请帮我检查下
还有帮我加上一个检测没有该学号报错的语句。谢谢

解决方案 »

  1.   

    INT型不能LIKE呀改成转成INT吧,学号都不确定吗?
      

  2.   

    或者改成CHARINDEX(textBox1.Text.Trim(),CONVERT(VARCHAR,学号))>0
      

  3.   

            ds.Tables[0].DefaultView.RowFilter = "学号 like'" + Convert.ToInt(textBox1.Text.Trim()) + "%'";
      

  4.   

    ds.Tables[0].DefaultView.RowFilter = "学号 =" + textBox1.Text.Trim(); 
    或者:
    SqlDataAdapter da = new SqlDataAdapter("SELECT convert(varchar(20),bh) AS '学号', xm AS '姓名', khks AS '考核科室', rksj AS '入科时间', cksj AS '出科时间',kspd AS '科室评定', llcj AS '理论成绩', blcj AS '病历书写成绩', jnpf AS '操作技能评分', bz AS '备注' FROM dbo.sxscj", cmd11); 另外不要在数据源中给中文列名,看起来很不方便。你可以单独给dataGridView1的每个列设置中文的标题。我怎么感觉是在模拟一个下拉表格的显示啊,真难为你了,没必要做的那么花销的,我宁可选择使用第三方控件来实现这种效果。
      

  5.   


    此人似乎脑子不正常了,字符串拼接的过程中转换到Int型又有什么意义?还是会自动转换回String类型的。
      

  6.   

    兄台,可能他的意思可能是ds.Tables[0].DefaultView.RowFilter = "学号 =" + convert.toint(textBox1.Text.Trim()); 只是想不通楼主学号还要用LIKE
    在LIKE那里面只能是字符!!!
      

  7.   

    如果不用llike的话,那比如我输入一个学号:10002,那么我输入第一个1,他就会自动把开始位为1的显示出来,怎么实现?
      

  8.   


    因为它要防止textBox1.Text中有SQL注入内容。连这个都不了解,就很难说可以“正常”地进行SQL数据库方面的编程了。
      

  9.   

    可惜,它放错了地方。应该给数据库查询时发送SQL命令,而不是给RowFiler。
      

  10.   

    在             if (firsttime == 0) 
                { 
                    firsttime = 1; 
                    getData(); 
                } 的这个getData方法,应该插入查询条件,然后从数据库条件查询。把数据全都取到内存来,然后在内存中做过滤,在csdn上也很难见到如此低效的程序设计的。
      

  11.   

    Keyup在释放键时发生KyPress
    两个事件你试下  我记得好想试KeyUp时间
      

  12.   

    把数据库中的学号字段改成varchar类型应该可以了