清除ListView项目并从第二个表单更新

时间:2015-03-05 06:05:09

标签: c# listview

我的主要表单(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();


        }

2 个答案:

答案 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