我的主要表单(ListView
)中有Form1
(SessionList)。我通过调用CreateSessionList()
中的函数Form1_Load()
来获取值形式的mysql数据库来列出项目。
现在我要过滤。所以,我使用主窗体(Form1)中的菜单调用了另一种形式(FilterForm)。
FilterForm
包含特定表的所有列标题的ComboBox
。
当我单击第二个表单(过滤器表单)中的过滤器按钮时,我将所选数据发送到第一个表单(Form1),在那里我清除列表视图中的所有先前项目并获得此新数据用于SELECT查询以在ListView
中显示新数据。
这里发生的事情是,之前的清单没有清除。它将计数显示为零。但View有旧数据。完全没有变化。
Form1.cs编码
private void CreateSessionList()
{
SessionList.View = View.Details;
SessionList.Items.Clear();
MySqlDataAdapter ada = new MySqlDataAdapter("SELECT * FROM sessiontbl", Properties.Settings.Default.DBPerfScoreConnectionString);
DataTable dt = new DataTable();
ada.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
ListViewItem listitem = new ListViewItem((i+1).ToString());
listitem.SubItems.Add(dr["SessionID"].ToString());
listitem.SubItems.Add(dr["InstID"].ToString());
listitem.SubItems.Add(dr["Trainee"].ToString());
listitem.SubItems.Add(dr["SessDt"].ToString());
listitem.SubItems.Add(dr["ModelID"].ToString());
listitem.SubItems.Add(dr["ModelName"].ToString());
listitem.SubItems.Add("Alarm");
SessionList.Items.Add(listitem);
}
}
public void GetWhereQuery(String Sesssel, String Inssel, String Trsel, String Modsel, String Dtsel)
{
SessionList.Items.Clear(); //After this,item count shows 0
SessionList.Refresh();
String sQuery = "SELECT * FROM sessiontbl WHERE (SessionID ='"+ Sesssel+"')";
MySqlDataAdapter ada = new MySqlDataAdapter(sQuery, Properties.Settings.Default.DBPerfScoreConnectionString);
DataTable dt = new DataTable();
ada.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
ListViewItem listitem = new ListViewItem((i + 1).ToString());
listitem.SubItems.Add(dr["SessionID"].ToString());
listitem.SubItems.Add(dr["InstID"].ToString());
listitem.SubItems.Add(dr["Trainee"].ToString());
listitem.SubItems.Add(dr["SessDt"].ToString());
listitem.SubItems.Add(dr["ModelID"].ToString());
listitem.SubItems.Add(dr["ModelName"].ToString());
listitem.SubItems.Add("Alarm");
SessionList.Items.Add(listitem);
}
}
FilterForm.cs编码
private void Filterbtn_Click(object sender, EventArgs e)
{
if(sessioncombo.SelectedIndex>-1)
Sesssel = sessioncombo.SelectedItem.ToString();
if(InstructorCombo.SelectedIndex>-1)
Inssel = InstructorCombo.SelectedItem.ToString();
if(TraineeCombo.SelectedIndex>-1)
Trsel = TraineeCombo.SelectedItem.ToString();
if(ModelCombo.SelectedIndex>-1)
Modsel = ModelCombo.SelectedItem.ToString();
if(Datecombo.SelectedIndex>-1)
Dtsel = Datecombo.SelectedItem.ToString();
frm = new Form1();
frm.GetWhereQuery(Sesssel, Inssel, Trsel, Modsel, Dtsel); //Calling function of form1 to filter.
this.Close();
}
答案 0 :(得分:0)
只需将Form1的实例发送到FilterForm,如
FilterForm form = new FilterForm();
form.Form1 = this;
form.Show();
在Form1
类型的FilterForm创建属性中public Form1 Form { get; set;}
并在Filterbtn_Click上调用`Form1.GetWhereQuery(...);
您的更改未应用,因此您创建了Form1的新实例。
答案 1 :(得分:0)
我按照这个链接。我得到了解决方案。 Link