2011-09-05 96 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不喜欢被用作数据源的名单现在空。在它之前添加一行以将数据源更改为其他内容可修复此问题。