1

2 つの異なるテキスト ボックスを使用して、データベースから情報をフィルター処理し、野球選手の平均スコアを表示したいと考えています。例として 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;
        }
4

2 に答える 2

0

RowFilterBETWEEN演算子をサポートしていません。また、あなたのような完全な sql クエリもサポートしていません。ただし、WHEREそこに -clause を指定して、ビューの行をフィルタリングできます。

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

必要な英語の形式(小数点としてのドット)を確保するために使用InvariantCulture.NumberFormatしました。String.FormatRowFilter

textBox2.Textまた、数値では許可されていないアポストロフィで値をラップしていること、および最小値最大値の入力として使用していることに注意してください。

于 2013-01-16T09:02:06.550 に答える
0

CultureInfo を追加することで機能するようになりました。// プレーヤーを検索し、作業中のプライベート 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();
    }

// CultureInfo を使用するようになりました private void button2_Click(object sender, EventArgs e) { decimal maximum = Convert.ToDecimal(textBox2.Text); 10 進数の最大値 = Convert.ToDecimal(textBox3.Text); // スコアが異なる選手を表示する必要があります view.RowFilter = String.Format(CultureInfo.InvariantCulture.NumberFormat ,("BattingAverage >= {0} AND BattingAverage <= {1}" , minimum, maximum);

        if (textBox2.Text == "") view.RowFilter = string.Empty;
        if (textBox3.Text == "") view.RowFilter = string.Empty;
    }
于 2013-01-17T08:47:38.193 に答える