具有多个文本框的行过滤器

本文关键字:过滤器 文本 | 更新日期: 2023-09-27 17:53:25

我想使用两个不同的文本框来过滤数据库中的信息,以显示棒球运动员的平均得分。例如,选择0,3到0,4,应该显示得分在这些数字之间的球员。

不工作的是以下代码:

// Search for player, working
private void button1_Click(object sender, EventArgs e)
        {
            view.RowFilter = "LastName like '%" + textBox1.Text + "%'";
            if (textBox1.Text == "") view.RowFilter = string.Empty;
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable datatable = new DataTable();
            SqlConnection connection = new SqlConnection(@"Data Source=.'SQLEXPRESS;AttachDbFilename=C:'Users'Mattias'Dropbox'C#'Database'Baseball.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            connection.Open();
            datatable.Load(new SqlCommand("select * from players", connection).ExecuteReader());
            dataGridView1.DataSource = view = datatable.DefaultView;
            connection.Close();
        }
// This button is not working
        private void button2_Click(object sender, EventArgs e)
        {
            decimal minimum = Convert.ToDecimal(textBox2.Text);
            decimal maximum = Convert.ToDecimal(textBox3.Text);
// Should display players with different scores
            view.RowFilter = String.Format("BattingAverage >= {0} AND BattingAverage <= {1}"
                , minimum, maximum);
            if (textBox2.Text == "") view.RowFilter = string.Empty;
            if (textBox3.Text == "") view.RowFilter = string.Empty;
        }

具有多个文本框的行过滤器

RowFilter不支持BETWEEN操作符。它也不支持像您这样的完整sql查询。但是,您可以在那里指定WHERE -子句来过滤视图的行:

view.RowFilter = String.Format(CultureInfo.InvariantCulture.NumberFormat,
                 "BattingAverage >= {0} AND BattingAverage <= {1}", minimum, maximum);

我在String.Format中使用InvariantCulture.NumberFormat以确保RowFilter中需要的英文格式(点作为小数分隔符)。

请注意,您还使用撇号包装了数值,这在数字上是不允许的,并且您正在使用textBox2.Text作为最小最大值的输入。

现在可以通过添加CultureInfo来工作。//搜索播放器,工作private void button1_Click(对象发送者,EventArgs e){视图。RowFilter = "LastName like '%" + textBox1。Text + "%'";如果(textBox1。Text == ")视图。RowFilter = string.Empty;}

    private void Form1_Load(object sender, EventArgs e)
    {
        DataTable datatable = new DataTable();
        SqlConnection connection = new SqlConnection(@"Data Source=.'SQLEXPRESS;AttachDbFilename=C:'Users'Mattias'Dropbox'C#'Database'Baseball.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        connection.Open();
        datatable.Load(new SqlCommand("select * from players", connection).ExecuteReader());
        dataGridView1.DataSource = view = datatable.DefaultView;
        connection.Close();
    }

//现在正在使用CultureInfoprivate void button2_Click(对象发送者,EventArgs e){decimal minimum = Convert.ToDecimal(textBox2.Text);decimal max = Convert.ToDecimal(textBox3.Text);//应该显示不同分数的玩家视图。RowFilter = String.Format(CultureInfo.InvariantCulture. format)NumberFormat,(" batingaverage>= {0} AND batingaverage <= {1}"

        if (textBox2.Text == "") view.RowFilter = string.Empty;
        if (textBox3.Text == "") view.RowFilter = string.Empty;
    }