2011-09-05 98 views
0

我有程序顯示列表的內容。菜單欄中的不同項目允許用戶在單擊項目時查看datagridview中的相應數據。但是對於一個特定的列表,我可以選擇過濾結果。當這個項目被點擊時,它會彈出一個對話框,允許用戶過濾他們的結果。這可以工作,然後您可以繼續查看其他列表,然後單擊過濾器項目以嘗試新的搜索。但是,我遇到的問題發生在您首次使用或不使用過濾器進行過濾搜索時,然後不使用另一個列表,而是使用或不使用過濾器進行另一次過濾搜索。當對話框第二次出現時,實際發生該錯誤,而不是當您單擊接受它的按鈕時。C#LINQ錯誤,無法弄清楚問題是什麼

,我收到如下錯誤:

「下面的異常出現在DataGridView: System.IndexOutOfRangeException:索引0沒有一個值在System.Windows.Forms.CurrencyManager.ge_Item (Int32索引)在System.Windows.Forms.DatagridView.DataGridViewDataConnection.GetError(Int32 rowIndex) 若要替換此默認對話框,請處理DataError事件。「

在錯誤中,有一部分根據哪一行選擇了一個單元格而發生變化。 「索引0」將更改爲「索引3」或基於該行的任何內容。

這部分的代碼如下:

private void mnusViewParagraphHistory_Click(object sender, EventArgs e) 
    { 
     ViewHistoryFilter histFilter = new ViewHistoryFilter(); 
     int idFilt; 
     string fundIDFilt = ""; 
     string changedBFilt = ""; 

     parHRes.Clear(); 
     if (parH.Count != 0) 
     { 
      if (histFilter.ShowDialog(this) == DialogResult.OK) 
      { 
       var parahistQuery = from his in parH 
            select his; 

       if (histFilter.txtID.Text.Trim() != "") 
       { 
        idFilt = Convert.ToInt32(histFilter.txtID.Text.Trim()); 
        parahistQuery = parahistQuery.Where(h => h.ID == idFilt); 
       } 

       if (histFilter.txtFundID.Text.Trim() != "") 
       { 
        fundIDFilt = histFilter.txtFundID.Text.Trim(); 
        parahistQuery = parahistQuery.Where(h => h.FundID.Contains(fundIDFilt.Trim())); 
       } 

       if (histFilter.txtChangedBy.Text.Trim() != "") 
       { 
        changedBFilt = histFilter.txtChangedBy.Text.Trim(); 
        parahistQuery = parahistQuery.Where(h => h.ChangedBy.Contains(changedBFilt.Trim())); 
       } 

       parHRes.AddRange(parahistQuery); 
      } 

      if (dataGridView1.DataSource != parHRes) 
      { 
       dataGridView1.DataSource = parHRes; 
      } 
     } 
    } 

如果我執行創建與其他項目不復制錯誤的錯誤是一樣的。然而,其他項目只能改變數據源,因爲我不需要過濾見下面的:

private void mnusViewParagraph_Click(object sender, EventArgs e) 
    { 
     if (dataGridView1.DataSource != parG) 
     { 
      dataGridView1.DataSource = parG; 
     } 
    } 

我不知道,如果我只是看不清真正的錯誤或不看它的後這麼長時間,但如果有人能幫助,將不勝感激。

編輯:

當數據誤差事件被處理我發現錯誤的上下文與由堆棧跟蹤給出的以下信息的顯示:

dataGridView1_DataError at offset 433 in file:line:column <filename unknown>:0:0 
OnDataError at offset 370 in file:line:column <filename unknown>:0:0 
OnDataErrorInternal at offset 47 in file:line:column <filename unknown>:0:0 
GetError at offset 156 in file:line:column <filename unknown>:0:0 
GetErrorText at offset 149 in file:line:column <filename unknown>:0:0 
Paint at offset 179 in file:line:column <filename unknown>:0:0 
PaintRows at offset 1551 in file:line:column <filename unknown>:0:0 
PaintGrid at offset 675 in file:line:column <filename unknown>:0:0 
OnPaint at offset 785 in file:line:column <filename unknown>:0:0 
PaintWithErrorHandling at offset 161 in file:line:column <filename unknown>:0:0 
WmPaint at offset 831 in file:line:column <filename unknown>:0:0 
WndProc at offset 689 in file:line:column <filename unknown>:0:0 
WndProc at offset 275 in file:line:column <filename unknown>:0:0 
OnMessage at offset 19 in file:line:column <filename unknown>:0:0 
WndProc at offset 49 in file:line:column <filename unknown>:0:0 
DebuggableCallback at offset 100 in file:line:column <filename unknown>:0:0 
DispatchMessageW at offset 0 in file:line:column <filename unknown>:0:0 
System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop at offset 647 in file:line:column <filename unknown>:0:0 
RunMessageLoopInner at offset 364 in file:line:column <filename unknown>:0:0 
RunMessageLoop at offset 97 in file:line:column <filename unknown>:0:0 
RunDialog at offset 51 in file:line:column <filename unknown>:0:0 
ShowDialog at offset 911 in file:line:column <filename unknown>:0:0 
mnusViewParagraphHistory_Click at offset 273 in file:line:column <filename unknown>:0:0 
RaiseEvent at offset 115 in file:line:column <filename unknown>:0:0 
OnClick at offset 70 in file:line:column <filename unknown>:0:0 
HandleClick at offset 201 in file:line:column <filename unknown>:0:0 
HandleMouseUp at offset 520 in file:line:column <filename unknown>:0:0 
FireEventInteractive at offset 137 in file:line:column <filename unknown>:0:0 
FireEvent at offset 280 in file:line:column <filename unknown>:0:0 
OnMouseUp at offset 178 in file:line:column <filename unknown>:0:0 
OnMouseUp at offset 38 in file:line:column <filename unknown>:0:0 
WmMouseUp at offset 721 in file:line:column <filename unknown>:0:0 
WndProc at offset 2362 in file:line:column <filename unknown>:0:0 
WndProc at offset 42 in file:line:column <filename unknown>:0:0 
WndProc at offset 74 in file:line:column <filename unknown>:0:0 
WndProc at offset 54 in file:line:column <filename unknown>:0:0 
OnMessage at offset 19 in file:line:column <filename unknown>:0:0 
WndProc at offset 49 in file:line:column <filename unknown>:0:0 
DebuggableCallback at offset 100 in file:line:column <filename unknown>:0:0 
DispatchMessageW at offset 0 in file:line:column <filename unknown>:0:0 
System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop at offset 647 in file:line:column <filename unknown>:0:0 
RunMessageLoopInner at offset 364 in file:line:column <filename unknown>:0:0 
RunMessageLoop at offset 97 in file:line:column <filename unknown>:0:0 
Run at offset 49 in file:line:column <filename unknown>:0:0 
Main at offset 77 in file:line:column <filename unknown>:0:0 
_nExecuteAssembly at offset 0 in file:line:column <filename unknown>:0:0 
ExecuteAssembly at offset 109 in file:line:column <filename unknown>:0:0 
RunUsersAssembly at offset 42 in file:line:column <filename unknown>:0:0 
ThreadStart_Context at offset 99 in file:line:column <filename unknown>:0:0 
Run at offset 176 in file:line:column <filename unknown>:0:0 
Run at offset 44 in file:line:column <filename unknown>:0:0 
ThreadStart at offset 68 in file:line:column <filename unknown>:0:0 

此重複3次,如果你接受它沒有停止的跡象進行的對話框。

+0

按照錯誤消息的建議處理DataError事件,並獲取適當的堆棧跟蹤。 –

+0

添加編輯問題 –

+0

我很感謝你回答了你自己的問題,但是你可以添加一個*答案*詳細解決方案?這樣,在所需的等待之後,您可以選擇它作爲正確的答案並結束問題。這看起來有點奇怪,但這就是我們在這裏做的。謝謝。 – Will

回答

1

我已經找出了問題所在。在發生錯誤的點是上線

parHRes.Clear(); 

在DataGridView不喜歡被用作數據源的名單現在空。在它之前添加一行以將數據源更改爲其他內容可修復此問題。