【发布时间】:2019-08-09 11:07:41
【问题描述】:
我有一个通过存储过程填充的 DataGridView。我希望能够通过在文本框中输入来过滤 DataGridView,但我对 C# 很陌生,所以我很难弄清楚如何让它工作。
我有一个存储过程,它从我的数据库中的两个表中获取数据,它运行这个查询:
SELECT l.LocationID,
l.LocationName,
g.GameName
FROM dbo.Locations l
JOIN dbo.Games g
ON g.GameID = l.GameID
ORDER BY l.LocationName
我的 Windows 窗体应用程序使用以下代码填充 DataGridView:
public static void fillLocations(DataGridView dgv)
{
using (SqlConnection con = new SqlConnection("Server = (local); Database = DBName; Integrated Security = SSPI;"))
{
using (DataTable dt = new DataTable())
{
try
{
con.Open();
using (SqlCommand cmd = new SqlCommand("sGetLocations", con))
{
cmd.CommandType = CommandType.StoredProcedure;
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = cmd;
da.Fill(dt);
dgv.DataSource = dt;
dgv.Columns[0].HeaderText = "ID";
dgv.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dgv.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
我想在我的表单上有两个文本框,这样我就可以通过搜索游戏名称或位置名称来过滤 DataGridView。理想情况下,当在文本框中输入位置或游戏名称时,它会过滤结果以仅显示具有该名称的位置或游戏,但我不确定使用我的代码实现此目的的最佳方法是什么。
编辑
我现在修改了我的存储过程,以按游戏或位置参数进行过滤
SELECT l.LocationID,
l.LocationName,
g.GameName
FROM dbo.Locations l
JOIN dbo.Games g
ON g.GameID = l.GameID
WHERE g.GameName LIKE '%' + @GameName + '%'
OR l.LocationName LIKE '%' + @LocationName + '%'
我还为我的搜索文本框编写了一个在 TextChanged 事件上调用的不同方法
public static void filterLocations(DataGridView dgv, TextBox tloc, TextBox tgam)
{
using (SqlConnection con = new SqlConnection("Server = (local); Database = BoneFish; Integrated Security = SSPI;"))
{
using (DataTable dt = new DataTable())
{
try
{
con.Open();
using (SqlCommand cmd = new SqlCommand("sFilterLocations", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@LocationName", tloc.Text);
cmd.Parameters.AddWithValue("@GameName", tgam.Text);
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = cmd;
da.Fill(dt);
dgv.DataSource = dt;
dgv.Columns[0].HeaderText = "ID";
dgv.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dgv.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
运行应用程序时我没有收到任何错误,但在搜索文本框中输入时没有任何反应。
【问题讨论】:
标签: c# sql-server