2009-08-21 101 views
1

我正在爲工作編寫一個數據庫編輯器/物料清單製作器(2個單獨的.exe),並且我有這個瘋狂的問題。以下是流程在應用程序中的工作方式:打開數據庫,搜索數據庫,檢查需要的項目,發送到物料清單製造商,另存爲.xls。在C#中檢查ListView以檢查項目的最佳方法是什麼?

到目前爲止,我可以將檢查的項目發送到BOM Maker,但只有當我打開搜索窗口時,檢查項目,而不實際搜索列表。目前在數據庫編輯器的搜索表單,我有這樣的循環:

for (int i = 0; i < rowCount; i++) 
{ 
    if (ResultBox1.Items[i].Checked == true) 
    { 
     //Code that creates .txt file to be loaded by the BOM Maker... 
    } 
} 

環路完美的作品,但只有當我儘量避免使用搜索功能。搜索功能會清除ListView,並用結果填充它,但爲什麼這很重要?

我得到的錯誤是: '22' 的

InvalidArgument = Value是不是 有效的 '索引'。參數名稱: 索引

'22'是我檢查的相對於我用來從頭開始填充ListView的數組的行。

除非我需要看看我的搜索方法,是否有另一種方式來執行此操作? 我在「foreach」循環中沒用,任何人都可以給我一個意見?

謝謝!

回答

1

這是行不通的嗎?

foreach (ListViewItem item in ResultBox1.Items) 
{ 
    if (item.Checked) 
    { 
     // Do somethign with it 
    } 
} 
+0

我試圖用你的代碼,但是對於if語句中,「.Checked」選項是不存在的‘項目’。任何想法我怎麼能得到它? – 2009-08-21 15:48:35

+0

AHA !!我想通了,而不是「var」,我用「ListViewItems」,而現在它就像一個魅力。謝謝! – 2009-08-21 17:19:25

+0

啊,對不起 - 它可能假定'item'是Object類型的。我的壞 - 我會更新我的答案。 – 2009-08-21 23:21:54

1

它看起來像主要的問題是你從你的數據庫結果中獲得你的索引範圍,但是你的ListView並不能準確地反映你用於索引範圍的數據庫結果。

你忘了在你搜索的時候更新某個地方的東西。

處理此問題的最簡單方法可能是刪除對數據庫結果的依賴關係,並僅依賴於ListView Items列表。例如:

var qry = from item in ResultBox1.Items where item.Checked select item; 
foreach(var item in qry) 
{ 
    // handle checked items individually. 
} 
0

 
Assuming it is a System.Windows.Forms.ListView...

foreach(var item in ResultBox1.SelectedItems) { //Do stuff }

+0

SelectedItems與CheckedItems相同嗎? – 2009-08-21 15:39:17

+0

我相信這不是,我想檢查一個項目的方框,將它發送給BOM製造商。選擇行不作爲功能,國際海事組織。 – 2009-08-21 15:54:12

相關問題