0

フィルタはmyTicketsSubmitButtonに対して機能しますが、allTicketsSubmitButtonに対しては機能しません。コードは同じですが、あるメソッドで機能し、別のメソッドでは機能しない理由がわかりません。

Visual Studio 2010でWinFormsとC#を使用しています

    private void myTicketsSubmitButton_Click(object sender, EventArgs e)
    {
        String sqlQuery = "SELECT u.CallerName, t.* FROM users u INNER JOIN tickets t ON u.id = t.user WHERE u.CallerName = '" + Environment.UserName.ToLower() + "'";
        GetData(sqlQuery);

        if (myTicketsAllRadioButton.Checked)
        {
            //GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus LIKE '%'";
        }

        if (myTicketsClosedRadioButton.Checked)
        {
            //GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus = 'Closed'";
        }

        if (myTicketsOpenRadioButton.Checked)
        {
            //GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus = 'Open'";                
        }
    }

    private void allTicketsSubmitButton_Click(object sender, EventArgs e)
    {
        String sqlQuery = "SELECT u.CallerName, t.* FROM users u INNER JOIN tickets t ON u.id = t.user";
        GetData(sqlQuery);

        if (myTicketsAllRadioButton.Checked)
        {
            //GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus LIKE '%'";
        }

        if (myTicketsClosedRadioButton.Checked)
        {
            //GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus = 'Closed'";
        }

        if (myTicketsOpenRadioButton.Checked)
        {
            //GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus = 'Open'";               
        }
    }

    private void GetData(string selectCommand) 
    {
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
        BindingSource bindingSource1 = new BindingSource();
        try 
        {
            // Specify a connection string. Replace the given value with a  
            // valid connection string for a Northwind SQL Server sample 
            // database accessible to your system.
            String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\testdb.accdb";

            // Create a new data adapter based on the specified query. 
            dataAdapter = new OleDbDataAdapter(selectCommand, connectionString);

            // Create a command builder to generate SQL update, insert, and 
            // delete commands based on selectCommand. These are used to 
            // update the database. 
            OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dataAdapter);

            // Populate a new data table and bind it to the BindingSource. 
            DataTable table = new DataTable(); 
            table.Locale = System.Globalization.CultureInfo.InvariantCulture; 
            dataAdapter.Fill(table); 
            bindingSource1.DataSource = table;
            ticketsBindingSource = bindingSource1;

            // Resize the DataGridView columns to fit the newly loaded content. 
            //ticketsDataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);                

            ticketsDataGridView.DataSource = bindingSource1;
        }
        catch(OleDbException)
        {
            MessageBox.Show("To run this example, replace the value of the connectionString variable with a connection string that is valid for your system.");
        }
    }

6つのラジオボタンがあります。

そのうちの3つはmyTickets用です--Open--Closed--All

そのうちの3つはallTickets用です--Open--Closed--All

myTicketsグループのラジオボタンをクリックすると、すべてが機能します

コードに小さな変更を加えましたが、allTicketsSubmitButtonにOpenまたはAllチケットのすべてのチケットが表示されません。

データベースは比較的小さいので、移動しながらすばやくテストできます。

5つのエントリがあります2開いています2閉じています1進行中の作業

2つのエントリが別のユーザーに割り当てられます(したがって、そのうちの3つはmyTicketsです)。

何か変なことに気づきました

myTicketsとallTicketsのラジオボタンを同じものに設定した場合にのみ、結果が正しく表示されます

(両方とも開いていると開いているチケットが表示されます)一方が開いていてもう一方が閉じている場合、何も起こりません

4

1 に答える 1

0

6つのラジオボタン(myTickets用に3つ、allTickets用に3つ)がある場合、allTicketsボタンクリックイベントでmyTicketsがチェックされるのはなぜですか?

コードを次の場所から変更する必要があると思います。

private void allTicketsSubmitButton_Click(object sender, EventArgs e)
    {
        String sqlQuery = "SELECT u.CallerName, t.* FROM users u INNER JOIN tickets t ON u.id = t.user";

        if (myTicketsAllRadioButton.Checked)
        {
            GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus LIKE '%'";
        }

        if (myTicketsClosedRadioButton.Checked)
        {
            GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus = 'Closed'";
        }

        if (myTicketsOpenRadioButton.Checked)
        {
            GetData(sqlQuery);
            ticketsBindingSource.Filter = "ProblemStatus = 'Open'";               
        }
    }

に:

private void allTicketsSubmitButton_Click(object sender, EventArgs e)
    {
        String sqlQuery = "SELECT u.CallerName, t.* FROM users u INNER JOIN tickets t ON u.id = t.user";
        GetData(sqlQuery); // move this here, you only need this in one place

        if (allTicketsAllRadioButton.Checked)
        {
            ticketsBindingSource.Filter = "ProblemStatus LIKE '%'";
        }

        if (allTicketsClosedRadioButton.Checked)
        {
            ticketsBindingSource.Filter = "ProblemStatus = 'Closed'";
        }

        if (allTicketsOpenRadioButton.Checked)
        {
            ticketsBindingSource.Filter = "ProblemStatus = 'Open'";               
        }
    }
于 2012-04-17T17:48:56.110 に答える