2014-01-29 7 views
0

Он успешно загружает элементы и изображения из таблицы, но когда я пытаюсь не искать ничего придумываетФильтрация ImageList и ListView на основе запроса

Вот мой код на события загрузки формы (работ)

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 Вот код поиска на событие изменения текста (здесь проблема)

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

ответ

1

Насколько я знаю, sql и подстановочные знаки, такие как %, работают только с оператором LIKE.

SQL Wildcards

+0

РАБОТАЕТ спасибо –

1

Прежде всего: вместо того, чтобы получать новые изображения, установленные каждый раз, когда вы печатаете что-то в текстовом поле, держать их в коллекции, может быть, и добавить к вашему ListBox только фильтруется часть его, как: listBox1.DataSource = SomeLocalCollection.Where(i=>i.ItemName.Contains(textBox2.Text)).ToList()

Кроме того, использование отладчик, чтобы проверить, какая часть не соответствует вашему коду.

+0

так, как это сделать, где именно ставить 'Collection.Where (я => i.ItemName.Contains (textBox2.Text))', он говорит мне 'Microsoft.VisualBasic.Collection» не содержат определение «Where'» –

+0

Вы импортировали пространство имен linq? System.Linq – Sukram

+0

В коллекции я имел в виду любую коллекцию IEnumerable. Когда вы загружаете свои изображения, сохраните их в списке, а не сразу добавьте в ListBox. – Tarec

Смежные вопросы