如何在datagrid视图中进行高效搜索?

时间:2014-11-17 06:28:07

标签: c# datagridview

我在我的Windows窗体应用程序中使用数据网格视图。在我的应用程序中,我每次查询时都需要搜索data.i写入搜索查询文本框按键事件。我的应用程序在运行application.i时变慢一点我的表中有大约2000行数据。我可以更快地进行搜索并减少数据库负载。有没有选项可以在没有数据库交互的情况下搜索数据网格中的数据

我的代码在

之下
private void txtsearch_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            datagridproduct.Focus();
        }
        string constring = @"Data Source=PC1\WINMANERP;Initial Catalog=Easylife;Integrated Security=True";
        //if (e.KeyCode == Keys.Enter)
        //{


        using (SqlConnection con = new SqlConnection(constring))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM Item_Details where Item_Code LIKE '%' + @NM + '%' OR Item_Name LIKE '%' + @NM + '%'  OR Supplier_Name LIKE '%'+@NM+'%' OR Location LIKE '%' + @NM + '%'", con))
            {
                cmd.Parameters.AddWithValue("@NM", txtsearch.Text);
                cmd.CommandType = CommandType.Text;
                using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                {
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);
                        datagridproduct.DataSource = dt;
                    }
                }
            }



        }




    }

2 个答案:

答案 0 :(得分:0)

在DataGridView中加载所有项目后,您可以使用数据网格单元而不是数据库进行搜索,并设置与您的搜索条件不匹配的行的可见属性隐藏。

private void Search(string item)
    {
        TotalRecords = 0;
        List<DataGridViewRow> rows = new List<DataGridViewRow>();
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.Cells[1].Value != null)
            {
                //search on 1st row of datagridview
                if (row.Cells[1].Value.ToString() == item)
                {
                    row.Visible = true;
                    TotalRecords += 1;
                }
                else
                {
                    row.Visible = false;
                }
            }
        }
        dataGridView1.Refresh();
        labelTotalRecords.Text = "Total records = " + TotalRecords.ToString();
    }

答案 1 :(得分:0)

在Global和user datatable select方法中声明DataTable(DataRow [] rows = dt.Select(“columnName =”+ urvalue));并根据行进行迭代,或者您可以使用“DataTable dt1 = rows.CopyToDataTable();”datagridproduct.DataSource = dt1;

如果您发现答案很有用,请回答