【问题标题】:How to display dynamic query result from listbox into datagridview如何将列表框中的动态查询结果显示到datagridview中
【发布时间】:2017-09-11 13:52:25
【问题描述】:

我不知道我的问题是否正确......但我想根据列表框中的多选项目将数据显示到 datagridview 中

例如

在这张图片中,我有一个列表框,它从数据库中检索数据,我想显示与用户选择的项目相关的结果

当我选择项目时,查询必须与我选择的项目相关

我的代码

for (int i = 0; i < listBox1.Items.Count; i++)
        {
            stringComparision += "'" + listBox1.Items[i].ToString() + "',";
        }
        stringComparision = stringComparision.TrimEnd(','); 
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter("select * from Territories where TerritoryName IN (" + stringComparision + ") ", conn);
        DataTable dt = new DataTable();
        da.Fill(dt);
        dataGridView1.DataSource = dt;
        conn.Close();

但像第一张图片 datagridview 显示没有数据 我为此使用了 SQLServer 2008

哪里错了? ..抱歉英语不好:)

【问题讨论】:

  • 您应该使用IN 运算符,这也不起作用,只准备循环内的比较字符串,然后将其提供给命令。
  • 您正在为每个项目读取数据库,然后为该项目填充网格。这样,您的网格中永远不会有超过一个项目。此外,您正在对列表中的所有项目执行此操作,而不仅仅是选定的项目。
  • @Berkay 你能给我提供正确的代码吗?
  • @oerkelens 那么这样做的正确方法是什么?
  • dataGridView1.Update() 或刷新

标签: c# winforms listbox


【解决方案1】:

你可以用for循环组合字符串,

string stringComparision = "";
for(int i = 0; i < listBox1.SelectedItems.Count; i++)
{
   DataRowView dr = listbox1.SelectedItems[i] as DataRowView;
   stringComparision += "'" + dr["TerritoryName"].ToString() + "',";
}
stringComparision = stringComparision.TrimEnd(','); // to delete last comma

或者你可以使用linqstring.Format()

string stringComparision = string.Join(",", listBox1.Items.Cast<string>()
                               .Select(x => string.Format("'{0}'", x)));

选择其中之一,其余相同,

conn.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from Territories where TerritoryName IN (" + stringComparision + ") ", conn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
conn.Close();

测试场景;我有包含项目的列表框:"test1","test2","test3","test4","test5"

输出是:

从 TerritoryName IN 的区域中选择 * ('test1','test2','test3','test4','test5')

希望有帮助,

【讨论】:

  • 添加前修剪字符串。使用 IN 运算符在 sql server 上自行尝试查询。 @Amr
  • 必须引用每个搜索词,但理想情况下,您会在此处使用表值参数。此外,您只需要选定的项目,而不是全部。
  • 正确的点。我在手机上。对此感到抱歉。我会尽快更新。 @Crowcoder
  • 查询在 sql server 中运行良好,例如: select * from TerritoryName IN('Maadi, Helwan','Kafr El Sheikh 1') 我不知道你所说的表值参数是什么意思 @众包
  • 在 for 循环中用单引号将列表框项目括起来。 @Amr
猜你喜欢
  • 2018-05-11
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2016-01-25
  • 2021-10-15
相关资源
最近更新 更多