【问题标题】:How to Search Datagridview (Stored Procedure Data) using Textbox如何使用文本框搜索 Datagridview(存储过程数据)
【发布时间】:2019-02-08 06:04:05
【问题描述】:

在我的 Windows 应用程序中,我有一个 DatagridviewTextbox 控件。我正在使用存储过程在 datagridview 中显示一些数据。问题是当我尝试在我的 datagridview 中搜索时,什么也没有发生,而且在输入到文本框时它也很迟钝,我发现了这个

CustomersList.DataSource = dt; 

是原因。我对使用存储过程很陌生。我希望有人能帮助我。

这是搜索代码

Datatable dt;
private void txt_usersearch_TextChanged(object sender, EventArgs e)
{
    using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesInventoryManagement.Properties.Settings.Setting"].ConnectionString))
        {
            using (var cmd = new SqlCommand("usp_GetCustomers", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;                   
                dt.DefaultView.RowFilter = "Full_Name LIKE '%{txt_usersearch.Text}%'";
                CustomersList.DataSource = dt;
            }
        }
}

这段代码是将我的数据显示到datagridview

public class Display 
{
    public static void Display_Customer(DataTable dt, DataGridView dgv)
    {     
        using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesInventoryManagement.Properties.Settings.Setting"].ConnectionString))
        {
            using (var cmd = new SqlCommand("usp_GetCustomers", con))
            {               
                con.Open();
                cmd.CommandType = CommandType.StoredProcedure;

                using (var sda = new SqlDataAdapter(cmd))
                {                        
                    dt = new DataTable();
                    sda.Fill(dt);
                    dgv.DataSource = dt;
                }

                con.Close();
            }
        }
    }  
}

表单加载

private void ManageCustomer_Load(object sender, EventArgs e)
{
        Display.Display_Customer(dt, CustomersList);
}

【问题讨论】:

  • TextChanged 事件中,似乎没有必要重新填充DataTable dt...忘记重新填充dt 并简单地从现有的dt @ 创建一个新的DataView 987654333@ 然后将最后一行设置为CustomersList.DataSource = dv; 而不是dt
  • 设置dataGridView.DataSource = dataTable; 就足够了。同样对于客户端搜索,你可以设置dataTable.DefaultView.RowFilter = "FullName LIKE '%{textBox1.Text}%'";你不需要重置DataSource,在DataTableDefaultView上应用过滤器就足够了。
  • @JohnG 我尝试了您的解决方案,但找不到我的任何列
  • 您应该更新/编辑您的问题以反映这一点“我尝试了您的解决方案” ...猜测您“尝试过”的内容纯属猜测。正如@Reza Aghaei 正确指出的那样,有很多方法可以实现您所描述的。
  • @JohnG 已更新,但当我输入内容时,显示的数据消失了

标签: c# winforms


【解决方案1】:

您为什么使用文本更改事件。那不是一个好办法。我曾经在 Dgv EditingControl Event 上进行实时搜索。您应该在 Dgv 上进行实时搜索并请向我展示您编写的存储过程

private void dgv_sales_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e)
        {
        try
        {
            if (dgv_sales.CurrentCell.ColumnIndex==0)
            {
                TextBox prodname = e.Control as TextBox;
                if (prodname!=null)
                {
                    prodname.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                    prodname.AutoCompleteCustomSource = ClientListDropDown();
                    prodname.AutoCompleteSource = AutoCompleteSource.CustomSource;
                }
            }
            else if (dgv_sales.CurrentCell.ColumnIndex==7)
            {
                TextBox prodname = e.Control as TextBox;
                if (prodname != null)
                {
                    prodname.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                    prodname.AutoCompleteCustomSource = BatchNoDropDown();
                    prodname.AutoCompleteSource = AutoCompleteSource.CustomSource;
                }

            }
            else
            {
                TextBox prodname = e.Control as TextBox;
                if (prodname != null)
                {
                    prodname.AutoCompleteMode = AutoCompleteMode.None;

                }

            }

        }
        catch (Exception)
        {


        }
    }

【讨论】:

  • 本次活动是做Dgv直播搜索
【解决方案2】:

解决了:)

DataView dv = dt.DefaultView;
dv.RowFilter = string.Format("Full_Name like '%{0}%'", txt_usersearch.Text);
CustomersList.DataSource = dv.ToTable();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多