Question

It successfully loads items and images from table, but when i try to search nothing comes up

Here's my code on the form load event(works)

public void IL()
{
imageList1.Images.Clear();
listView1.Items.Clear();
listBox1.Items.Clear();

SqlDataReader dr;
cn.Open();
SqlCommand cmd = new SqlCommand("Select * from EnteryItem ", cn);
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
try
{
var imageBytes = (byte[])dr["ItemImage"];
MemoryStream memStm = new MemoryStream(imageBytes);
memStm.Seek(0, SeekOrigin.Begin);
Image image = Image.FromStream(memStm);
imageList1.Images.Add(image);

if (dr["ItemName"].ToString() == "")
{
    listBox1.Items.Add(dr["ItemBarcode"].ToString());
}
else
{
    listBox1.Items.Add(dr["ItemName"].ToString());
}
}
catch
{
Bitmap bmp = new Bitmap(78, 78);
using (Graphics gr = Graphics.FromImage(bmp))
{
    gr.Clear(Color.FromKnownColor(KnownColor.ControlDarkDark));
}
imageList1.Images.Add(bmp);

if (dr["ItemName"].ToString() == "")
{
    listBox1.Items.Add(dr["ItemBarcode"].ToString());
}
else
{
    listBox1.Items.Add(dr["ItemName"].ToString());
}
}
}
dr.Close();


this.imageList1.ImageSize = new Size(100, 100);
imageList1.ColorDepth = ColorDepth.Depth32Bit;
this.listView1.LargeImageList = this.imageList1;
for (int j = 0; j < this.imageList1.Images.Count; j++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = j;
item.Text = listBox1.Items[j].ToString();
this.listView1.Items.Add(item);
}
}
cn.Close();
}

enter image description here Here is the search code on text change event(here's the problem)

private void search()
{
if (textBox2.Text == "")
{
IL();
}

imageList1.Images.Clear();
listView1.Items.Clear();
listBox1.Items.Clear();

SqlDataReader dr;
cn.Open();
SqlCommand cmd = new SqlCommand("Select * from EnteryItem WHERE ItemName = N'%" + textBox2.Text + "%' Or ItemBarcode = N'" + textBox2.Text + "' ", cn);
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
try
{
var imageBytes = (byte[])dr["ItemImage"];
MemoryStream memStm = new MemoryStream(imageBytes);
memStm.Seek(0, SeekOrigin.Begin);
Image image = Image.FromStream(memStm);
imageList1.Images.Add(image);

if (dr["ItemName"].ToString() == "")
{
    listBox1.Items.Add(dr["ItemBarcode"].ToString());
}
else
{
    listBox1.Items.Add(dr["ItemName"].ToString());
}
}
catch
{
Bitmap bmp = new Bitmap(78, 78);
using (Graphics gr = Graphics.FromImage(bmp))
{
    gr.Clear(Color.FromKnownColor(KnownColor.ControlDarkDark));
}
imageList1.Images.Add(bmp);

if (dr["ItemName"].ToString() == "")
{
    listBox1.Items.Add(dr["ItemBarcode"].ToString());
}
else
{
    listBox1.Items.Add(dr["ItemName"].ToString());
}
}
}
dr.Close();


this.imageList1.ImageSize = new Size(100, 100);
imageList1.ColorDepth = ColorDepth.Depth32Bit;
this.listView1.LargeImageList = this.imageList1;
for (int j = 0; j < this.imageList1.Images.Count; j++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = j;
item.Text = listBox1.Items[j].ToString();
this.listView1.Items.Add(item);
}
}
cn.Close();

}

enter image description here

Was it helpful?

Solution

As far as i know sql and wildcards like % works only with a LIKE operator.

SQL Wildcards

OTHER TIPS

First of all: instead of getting new images set every time you type something in your textbox, keep them in a collection maybe and add to your listbox only filtered part of it, like: listBox1.DataSource = SomeLocalCollection.Where(i=>i.ItemName.Contains(textBox2.Text)).ToList()

Also, use debugger to check which part goes wrong in your code.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top