2014-01-29 29 views
0

它成功加載項和圖片來自臺,但是當我試圖尋找沒有出現過濾圖像列表和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

首先:而不是讓每次你輸入你的文本框的東西,讓他們集合中也許並添加到您的列表框只過濾其中的一部分,就像一次新的圖像:listBox1.DataSource = SomeLocalCollection.Where(i=>i.ItemName.Contains(textBox2.Text)).ToList()

而且,使用調試器來檢查代碼中的哪個部分出錯。

+0

所以如何做到這一點正是把'Collection.Where(I => i.ItemName.Contains(textBox2.Text))',它告訴我'Microsoft.VisualBasic.Collection」不包含'Where'的定義 –

+0

您是否導入了linq命名空間? System.Linq – Sukram

+0

集合我的意思是任何IEnumerable集合。當你下載你的圖像時,將它們保存在列表中,而不是直接添加到列表框中。 – Tarec