フィルタは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のラジオボタンを同じものに設定した場合にのみ、結果が正しく表示されます
(両方とも開いていると開いているチケットが表示されます)一方が開いていてもう一方が閉じている場合、何も起こりません