Amr
Amr

Reputation: 100

How to display dynamic query result from listbox into datagridview

I don't know that my question is right or not .. but i want to display data into datagridview depending on multi selection items from list box

for example

enter image description here

in this pic i have listbox which retrieve data from database i want to display result related to items which user select

enter image description here

when i select items the query must related to my selected items

my code

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();

but like the first pic datagridview show no data i used SQLServer 2008 for this

where's the wrong ? .. sorry for bad english :)

Upvotes: 0

Views: 644

Answers (1)

Berkay Yaylacı
Berkay Yaylacı

Reputation: 4513

You can combine strings with for loop,

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

Or you can use linq and string.Format(),

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

Choose one of them and the rest is same,

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();

Test scenario; I have listbox with items : "test1","test2","test3","test4","test5"

Output is:

select * from Territories where TerritoryName IN ('test1','test2','test3','test4','test5')

Hope helps,

Upvotes: 1

Related Questions