【问题标题】:c# Listview Search using Textboxc# Listview 使用文本框搜索
【发布时间】:2015-08-31 18:38:58
【问题描述】:

我有一个 c# windows 窗体,可以将ID, Name,andBirthday 保存到我的Employee 表中。我使用这些代码将数据保存在我的表中使用Save Button

private void Save_Click_1(object sender, EventArgs e)
    {
        try
        {
            MainDatabaseDataSetTableAdapters.EmployeeTableAdapter employee = new MainDatabaseDataSetTableAdapters.EmployeeTableAdapter();
            employee.InsertQuery(textBox1.Text.Trim(),
                textBox2.Text.Trim(),
                textBox3.Text.Trim());


            MessageBox.Show("Saved");

        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

使用此查询:

插入员工 (ID、姓名、生日)值(@ID、@Name、@Birthday)

我使用Populate Button 将我保存的数据从我的数据库显示到Listview 使用此代码:

private void Populate_Click(object sender, EventArgs e)
    {
        listView1.Items.Clear();

        DataTable dtable = mainDatabaseDataSet.Tables["Employee"];

        for (int i = 0; i < dtable.Rows.Count; i++)
        {
            DataRow drow = dtable.Rows[i];

            if (drow.RowState != DataRowState.Deleted)
            {
                ListViewItem item = new ListViewItem(drow["ID"].ToString());
                item.SubItems.Add(drow["Name"].ToString());
                item.SubItems.Add(drow["Birthday"].ToString());

                listView1.Items.Add(item);
            }
        }

所以我现在的问题是我不知道如何使用textboxSearchButton 在我的listview 中进行搜索。

我有一个SearchQuery

从员工那里选择 ID、姓名、生日
(名称 = @Name)

我想我可以将其插入我的SearchButton,但我不知道如何。

请人帮忙。

在我使用此代码填充我的列表视图之前

 DataTable dtable = mainDatabaseDataSet.Tables["Employee"];

我使用此代码进行搜索并且它有效。我使用此代码设置我的数据库连接:

 public SqlCeConnection connection = new SqlCeConnection(@"Data Source = C:\...\...\...");

然后我将此代码插入我的SearchButton

 private void button2_Click(object sender, EventArgs e)
    {


        SqlCeCommand search = new SqlCeCommand("SELECT * FROM Employee Where Name like '%" + Search.Text + "%'", connection);


        try
        {
            SqlDataReader datareader = search.ExecuteReader();


            while (datareader.Read())
            {
                ListViewItem item = new ListViewItem(datareader["ID"].ToString());
                item.SubItems.Add(datareader["Name"].ToString());
                item.SubItems.Add(datareader["Birthday"].ToString());


                listView1.Items.Add(item);
            }
        }


        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

但这不是我老师想要的。他想看看我如何使用此代码进行搜索以填充 Listview

DataTable dtable = mainDatabaseDataSet.Tables["Employee"];

我知道这里有人可能对如何做到这一点有一个想法。请帮帮我。

【问题讨论】:

标签: c# mysql database listview search


【解决方案1】:

您还可以过滤数据行。参考

https://msdn.microsoft.com/en-us/library/way3dy9w(v=vs.110).aspx

like dtable.Select(Name=textbox1.text);

【讨论】:

  • 我使用了这些代码,但我不知道我将把它放在我的搜索按钮中的位置和方式 dtable.Select("Name like '%" + textBox4.Text + "%'" );
  • 当你点击搜索按钮在文本框中写入一些文本。应该是这个按钮的创建事件,并在这个事件中编写代码。
  • 您已经可以过滤查询中的数据。 SqlCeCommand search = new SqlCeCommand("SELECT * FROM Employee Where Name like '%" + Search.Text + "%'", connection);不需要这段代码 dtable.Select("Name like '%" + Search.Text + "%'");
【解决方案2】:

您可以在SearchButton 点击处理程序中设置dtable.DefaultView.RowFilter 属性并在Populate_Click 方法中迭代DataTable.DefaultView 而不是表行。

【讨论】:

    【解决方案3】:

    我自己解决了。 感谢您浏览我的问题。这是我使用的代码

     public MainDatabaseDataSet.EmployeeDataTable getData(string data)
        {
            MainDatabaseDataSetTableAdapters.EmployeeTableAdapter returnEmployee = new MainDatabaseDataSetTableAdapters.EmployeeTableAdapter();
            return returnEmployee.GetDataByName(this.textBox4.Text.Trim());
        }
    
        private void Search_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
    
            try
            {
    
                MainDatabaseDataSet.EmployeeDataTable GetName = getData(this.Search.Text);
                MainDatabaseDataSet.EmployeeRow GetName2 = (MainDatabaseDataSet.EmployeeRow)GetName.Rows[0];
    
    
                for (int i = 0; i < GetName.Rows.Count; i++)
                {
                    DataRow drow = GetName.Rows[i];
    
                    if (drow.RowState != DataRowState.Deleted)
                    {
                        ListViewItem item = new ListViewItem(drow["ID"].ToString());
                        item.SubItems.Add(drow["Name"].ToString());
                        item.SubItems.Add(drow["Birthday"].ToString());
    
                        listView1.Items.Add(item);
                    }
    
    
                }
            }
    
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    
    
        }
    

    【讨论】:

    • 您应该接受一个答案,即使是这个答案,因为问题在 Stack Overflow 中被记录为已解决。点击绿色勾号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多