【问题标题】:c# filter listview using textboxc#使用文本框过滤listview
【发布时间】:2013-07-19 09:45:22
【问题描述】:

我有从 sql 数据库中获取数据的列表视图。我想通过在文本框中输入的文本进行搜索,并在单击按钮后显示结果并隐藏不匹配的记录

这是我的方法

请帮忙

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Inventory_Manager_Pro
{
public partial class Modify : Form
{

    public SqlConnection cn = new SqlConnection("Data Source=10.0.0.13;Initial Catalog=INVENTDB;Persist Security Info=True;User ID=sa;Password=farespila010A@;Encrypt=False");


    public Modify()
    {
        InitializeComponent();
    }

    private void populate()
    {
        listView1.Items.Clear();

        SqlCommand cm = new SqlCommand("SELECT * FROM lapdev", cn);

        try
        {

            SqlDataReader dr = cm.ExecuteReader();
            while (dr.Read())
            {

                ListViewItem it = new ListViewItem(dr["fillingcode"].ToString());
                it.SubItems.Add(dr["username"].ToString());
                it.SubItems.Add(dr["branch"].ToString());
                it.SubItems.Add(dr["department"].ToString());
                it.SubItems.Add(dr["agency"].ToString());
                it.SubItems.Add(dr["computername"].ToString());
                it.SubItems.Add(dr["lapmodel"].ToString());
                it.SubItems.Add(dr["lapserial"].ToString());
                it.SubItems.Add(dr["assetnumber"].ToString());
                it.SubItems.Add(dr["os"].ToString());
                it.SubItems.Add(dr["winlicense"].ToString());
                it.SubItems.Add(dr["office"].ToString());
                it.SubItems.Add(dr["officelicense"].ToString());
                it.SubItems.Add(dr["hddsize"].ToString());
                it.SubItems.Add(dr["processor"].ToString());
                it.SubItems.Add(dr["ram"].ToString());
                it.SubItems.Add(dr["macadress"].ToString());
                it.SubItems.Add(dr["ipadress"].ToString());

                listView1.Items.Add(it);

            }

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

    }

    private void Modify_Shown(object sender, EventArgs e)
    {
        try
        {
            cn.Open();
            populate();
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            Application.ExitThread();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
listView1.Items.Clear(); // clear list items before adding 
    listView1.Items.AddRange(Items.Where(i=>string.IsNullOrEmpty(textBox1.Text)||i.Name.StartsWith(textBox1.Text))
        .Select(c => new ListViewItem(c.Name)).ToArray());

    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {



    }

    private void button2_Click(object sender, EventArgs e)
    {

    }

}

}

【问题讨论】:

  • 我可以确切地看到您的问题出在哪里.. 但是您可以吗?您是否尝试过解决这个问题?除了SELECT * FROM,您还学过任何 SQL 吗?我们可以给你答案..但它们是你应该能够自己调查的答案。对不起,如果这听起来很苛刻。
  • 我一直在寻找 2 天不停..如果你可以请帮忙
  • "SELECT * FROM lapdev WHERE YourField='" + textBox1.Text + "'"
  • 不错的网站,带有示例 sql 和其他内容,请在之后查看 - w3schools.com/sql/default.asp
  • terrybozzio 非常感谢,但你能告诉我我应该在上面的代码中把代码放在哪里

标签: c# listview filter textbox


【解决方案1】:

在你的 pupolate 方法中这样做:

    private void populate()
    {
        listView1.Items.Clear();
        SqlCommand cm;
        if(textBox1.Text == "")
           cm = new SqlCommand("SELECT * FROM lapdev", cn);
        else
            cm = new SqlCommand("SELECT * FROM lapdev WHERE YourField='" + textBox1.Text + "'", cn);


        try
        {

            SqlDataReader dr = cm.ExecuteReader();
            while (dr.Read())
            {

                ListViewItem it = new ListViewItem(dr["fillingcode"].ToString());
                it.SubItems.Add(dr["username"].ToString());
                it.SubItems.Add(dr["branch"].ToString());
                it.SubItems.Add(dr["department"].ToString());
                it.SubItems.Add(dr["agency"].ToString());
                it.SubItems.Add(dr["computername"].ToString());
                it.SubItems.Add(dr["lapmodel"].ToString());
                it.SubItems.Add(dr["lapserial"].ToString());
                it.SubItems.Add(dr["assetnumber"].ToString());
                it.SubItems.Add(dr["os"].ToString());
                it.SubItems.Add(dr["winlicense"].ToString());
                it.SubItems.Add(dr["office"].ToString());
                it.SubItems.Add(dr["officelicense"].ToString());
                it.SubItems.Add(dr["hddsize"].ToString());
                it.SubItems.Add(dr["processor"].ToString());
                it.SubItems.Add(dr["ram"].ToString());
                it.SubItems.Add(dr["macadress"].ToString());
                it.SubItems.Add(dr["ipadress"].ToString());

                listView1.Items.Add(it);

            }

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

    }

在您的按钮点击事件中:

    private void button1_Click(object sender, EventArgs e)
    {
         //listView1.Items.Clear(); // clear list items before adding 
         populate();
         //you type what you want in textbox then click button.
    }

您甚至不需要在单击按钮时调用 clear,因为 populate 方法已经解决了这个问题。

【讨论】:

  • 新编辑我忘了不需要在按钮上调用清除,填充方法会处理这个问题。
猜你喜欢
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 2015-08-31
  • 2013-07-29
相关资源
最近更新 更多