1

我正在调试一个基于 WebForms 模型构建的网站,使用 ASP、C# 作为代码隐藏和 SQL Express 2008 R2。我正在尝试调试一个使用 ASPxGridView 的页面,该页面是从 .aspx 文件中填充的,并且使用的数据集也是在那里创建的。使用数据选择

 SelectCommand="SELECT MachineID, ProgramNo, (CONVERT (VARCHAR(19), Start, 120)) as Start,(CONVERT (VARCHAR(12), Stop,114)) as StopTime, WorkCount, PartCount as TotalWorkCount,(CONVERT (VARCHAR(12), Stop-start,114)) as PartCycle  FROM Program WHERE (MachineID = @MachineID) AND (WorkCount > 0) AND (CONVERT (VARCHAR(19), Start, 120) >= @StartDate) AND (CONVERT (VARCHAR(10), Start, 120) <= @EndDate) order by Start Desc">

问题是大多数用户都可以登录并且页面运行良好,但少数用户在 Web 浏览器中看到以下错误:

在所选数据源中找不到名为“PartCycle”的字段或属性。此错误的可能原因可能如下: 网格列名称拼写错误或不区分大小写;将错误或未正确初始化的数据源分配给网格。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Web.HttpException:在所选数据源中找不到名为“PartCycle”的字段或属性。此错误的可能原因可能如下: 网格列名称拼写错误或不区分大小写;将错误或未正确初始化的数据源分配给网格。

源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[HttpException (0x80004005):在所选数据源中找不到名为“PartCycle”的字段或属性。此错误的可能原因可能如下: 网格列名称拼写错误或不区分大小写;将错误或未正确初始化的数据源分配给网格。] DevExpress.Web.Data.WebDataControllerProvider.GetRowValueByControllerRow(Int32 controllerRow, String fieldName, Boolean isDesignTime) +300 DevExpress.Web.Data.WebDataControllerProvider.GetRowValue(Int32 visibleIndex, String fieldName , Boolean isDesignTime) +203 DevExpress.Web.Data.WebDataProxy.GetRowValue(Int32 visibleIndex, String fieldName) +77

如您所见,PartCycle 不是表中的列,而是用作 (CONVERT (VARCHAR(12), Stop-start,114)) 的别名。为了改变情节,当我以管理员身份登录网站时,我可以很好地查看问题数据。看到此错误的用户具有各种 ASPNET 角色,但每个用户都可以访问所选表中的数据。

4

1 回答 1

2

这是因为 ASPxGridView 缓存列。

在您的情况下,您的数据源是动态的,即不同用户的数据源不同。

确保在绑定 ASPxGridView 之前清除列。

要清除列:

agvObject.Columns.Clear();
于 2013-02-27T10:28:57.807 回答