具有多个文本框的行过滤器
本文关键字:过滤器 文本 | 更新日期: 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;
}