我正在尝试使用On_Selecting事件来填充linqdatasource,而linqdatasource又用于向图表提供数据。当事件触发时,e.Result会抛出一个空引用异常。我无法弄明白这一点。请帮忙。
首先,linqdatasource和图表的代码:
<asp:Chart ID="MonthlyChart"
runat="server"
DataSourceID="LinqGetChartData">
<series>
<asp:Series Label="#VALX, #VALY"
ChartType="Pie"
Name="Series1"
XValueMember="CostSum"
YValueMembers="SalesMonth"></asp:Series>
</series>
<chartareas>
<asp:ChartArea Name="ChartArea1">
<AxisY Title="Sales Month">
<LabelStyle Format="MMMM" />
</AxisY>
<AxisX Title="Total"></AxisX>
<Area3DStyle Enable3D="True"
WallWidth="10"></Area3DStyle>
</asp:ChartArea>
</chartareas>
</asp:Chart>
<asp:LinqDataSource ID="LinqGetChartData"
runat="server"
ContextTypeName="MegaChallengePapaBobsPizza.Persistence.CustomerEntities"
EntityTypeName=""
OnSelecting="LinqGetChartData_Selecting"
TableName="Customers"></asp:LinqDataSource>
接下来,On_Selecting事件的代码:
protected void LinqGetChartData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var customerList = Domain.CustomerManager.GetCustomers();
var query = customerList.OrderBy(c => c.OrderDate)
.GroupBy(c => c.OrderDate.ToString("MMMM"),
(c => c.Cost),
(groupKey, totCost) => new SalesResult()
{
SalesMonth = groupKey,
CostSum = totCost.Sum()
});
e.Result = query;
}
最后,触发事件的代码:
LinqGetChartData_Selecting(sender, e as LinqDataSourceSelectEventArgs);
非常感谢任何帮助。感谢。
答案 0 :(得分:0)
由于您在Page_Load事件中调用事件处理程序,因此我假设您使用的变量“e”是Page_Load事件的EventArgs参数。此参数的类型不是LinqDataSourceSelectEventArgs,导致以下返回null。
e as LinqDataSourceSelectEventArgs
当您尝试访问属性“Result”null时,将抛出空引用异常。
由于事件处理程序在asp代码中分配给LinqDataSource对象,因此除非您有特殊原因,否则不应在Page_Load中再次调用它。