【发布时间】:2019-02-08 06:04:05
【问题描述】:
在我的 Windows 应用程序中,我有一个 Datagridview 和 Textbox 控件。我正在使用存储过程在 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事件中,似乎没有必要重新填充DataTabledt...忘记重新填充dt并简单地从现有的dt@ 创建一个新的DataView987654333@ 然后将最后一行设置为CustomersList.DataSource = dv;而不是dt -
设置
dataGridView.DataSource = dataTable;就足够了。同样对于客户端搜索,你可以设置dataTable.DefaultView.RowFilter = "FullName LIKE '%{textBox1.Text}%'";你不需要重置DataSource,在DataTable的DefaultView上应用过滤器就足够了。 -
@JohnG 我尝试了您的解决方案,但找不到我的任何列
-
您应该更新/编辑您的问题以反映这一点“我尝试了您的解决方案” ...猜测您“尝试过”的内容纯属猜测。正如@Reza Aghaei 正确指出的那样,有很多方法可以实现您所描述的。
-
@JohnG 已更新,但当我输入内容时,显示的数据消失了