【问题标题】:C# LINQ error, can't figure out what the problem isC# LINQ 错误,不知道是什么问题
【发布时间】:2011-11-10 16:40:30
【问题描述】:

我的程序显示列表的内容。菜单条中的不同项目允许用户在单击项目时查看数据网格视图中的相应数据。但是对于一个特定的列表,我可以选择过滤结果。单击此项目时,它将弹出一个对话框,允许用户过滤其结果。这可行,然后您可以继续查看其他列表,然后单击过滤器项目以尝试新的搜索。但是,当您第一次使用或不使用过滤器进行过滤搜索时,就会出现我遇到的问题,然后不是转到另一个列表,而是使用或不使用过滤器进行另一个过滤搜索。该错误实际上是在对话框第二次出现时发生的,而不是在您单击接受它的按钮时发生的。

我收到的错误如下:

"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 次,如果您接受对话框,它会继续运行而没有停止的迹象。

【问题讨论】:

  • 按照错误信息提示处理 DataError 事件,并获取正确的堆栈跟踪。
  • 感谢您回答了自己的问题,但您能否添加一个详细说明解决方案的答案?这样,在所需的等待之后,您可以选择它作为正确答案并关闭问题。这可能看起来有点奇怪,但这就是我们在这里的做法。谢谢。
  • 我本来打算去的,但是当我尝试它时告诉我我需要等待 6 个小时才能完成

标签: c# linq data-binding datagridview dialog


【解决方案1】:

我已经弄清楚了问题所在。发生错误的点在线上

parHRes.Clear();

datagridview 不喜欢用作数据源的列表现在为空。在它之前添加一行以将数据源更改为其他内容可以解决此问题。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多