GridGroupHeaderItem.AggregatesValues没有Eval

时间:2016-12-21 11:07:55

标签: asp.net telerik

telerik documentation中,可以说聚合值存储在url.templateArgs.shortname中。他们甚至在exemple中使用它。

但我觉得无法证明。因为每一个都是真的,直到被证明是错的。对吧?
让我为你提供一个最小的,完整的,可验证的例子。所以你可以指出我的错误。

Aspx:

AggregatesValues

代码背后:

<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" AllowPaging="True" ShowGroupPanel="True">
    <MasterTableView>
        <GroupByExpressions>
            <telerik:GridGroupByExpression>
                <SelectFields>                       
                    <telerik:GridGroupByField FieldAlias="GrpGroupID1" FieldName="GroupID" />
                    <telerik:GridGroupByField FieldAlias="SumCount" FieldName="Count" Aggregate="Sum" />
                </SelectFields>
                <GroupByFields>
                    <telerik:GridGroupByField FieldAlias="GrpGroupID" FieldName="GroupID" HeaderText="" />
                </GroupByFields>
            </telerik:GridGroupByExpression>
        </GroupByExpressions>
        <GroupHeaderTemplate>
            <table>
                <tr>
                    <td>eval GrpGroupID1:</td>
                    <td><%# Eval("GrpGroupID1") %></td>
                    <td> ||| </td>
                    <td>Bind GrpGroupID1:</td>
                    <td><%# ((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"] %></td>
                </tr>
                <tr>
                    <td>eval SumCount:</td>
                    <td><%# Eval("SumCount") %></td>
                    <td> ||| </td>
                    <td>Bind SumCount:</td>
                    <td><%# ((GridGroupHeaderItem)Container).AggregatesValues["SumCount"] %></td>
                </tr>
            </table>
        </GroupHeaderTemplate>
        <Columns>
            <telerik:GridNumericColumn DataField="ID" HeaderText="ID" SortExpression="ID" UniqueName="Name_ID" />
            <telerik:GridNumericColumn DataField="GroupID" HeaderText="GroupID" SortExpression="GroupID" UniqueName="Name_GroupID" />
            <telerik:GridBoundColumn DataField="Name" HeaderText="Name" SortExpression="Name" UniqueName="Name_Name" />
            <telerik:GridBoundColumn DataField="Text" HeaderText="Text" SortExpression="Text" UniqueName="Name_Text" />                
            <telerik:GridNumericColumn DataField="Count" HeaderText="Count" SortExpression="Count" UniqueName="Name_Count" Aggregate="Sum" />
        </Columns>
    </MasterTableView>

</telerik:RadGrid>

结果:

debug中的AggregatesValues的键和值:

Key and values of AggregatesValues in debug

数据显示的例子: Exemple of data display

正如你在这个例子中所看到的:
  - protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { List<TmpType> myData = new List<TmpType>(); List<string> firstNames = new List<string>() { "Angela", "Pamela", "Sandra", "Rita", "Monica", "Erica", "Tina", "Mary", "Jessica", "Loubega" }; List<string> Location = new List<string>() { "Reunion", "Paris", "Bretagne", "Madagascar", "UK", "Maurice" }; Random random = new Random(); for (int i = 0; i <= 88; i++) { TmpType row = new TmpType(); row.ID = i + 1; row.GroupID = random.Next(10); row.Count = random.Next(10); row.Name = firstNames[random.Next(firstNames.Count)]; row.Text = Location[random.Next(Location.Count)]; myData.Add(row); } RadGrid1.DataSource = myData; } class TmpType { public string Name { get; set; } public string Text { get; set; } public int Count { get; set; } public int GroupID { get; set; } public int ID { get; set; } } 可以找到值
何时:
  - Eval("SumCount")失败!

文档说:

  

当您要访问当前组中项目的总聚合时的字段别名。

((GridGroupHeaderItem)Container).AggregatesValues["SumCount"]是我的FieldAlias。

我尝试了什么:

以下列出了我尝试过的所有事情和结果。

Eval():总是几乎正确,几乎所有内容的近似知识。

  1. SumCount提供groupby字段的当前值,好的!
  2. Eval("GrpGroupID1")提供聚合函数的正确结果,好的!
  3. Eval("SumCount")为此论坛提供行的值(4),而非预期。
  4. Eval("Count")错误,因为这不是任何属性,好的!
  5. AggregatesValues:会很快!

    1. Eval("Name_Count")提供groupby字段的当前值,好的!

    2. ((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"]返回NULL

    3. 这些测试是使用Everything else而不使用标签进行的。

      旁注:

      • 是的,我可以简单地使用asp:Label。但为什么?为什么我在MSDN状态时使用Eval我不应该使用它,以及Telerik文档说明我可以使用聚合值集合。

      问题在哪里?

      许多人会问:“问题在哪里?” 如何在没有EvalGridGroupHeaderItem.AggregatesValues的情况下获得此Eval

1 个答案:

答案 0 :(得分:1)

“ Name_GroupID”缺少%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np def plot_timeseries(*args): '''Plots all time series taken as arguments ''' length = len(args[0]) months = pd.date_range(start = '2018-01-01', periods = length, freq = 'MS') columns = dict() enum = enumerate(args) for i, series in enum: # Check arguments and handle errors if len(series) != length: raise ValueError('Time series are not of equal length.') if not isinstance(series, (np.ndarray, np.generic) ): raise ValueError('Arguments must be numpy arrays. {} is not!'.format(series)) # name columns columns['ts{}'.format(i+1)] = series # create dataframe with all series columns['month'] = months df = pd.DataFrame(columns).set_index('month') # plotting plt.figure(figsize=(10,6)) sns.set(style="dark") g = sns.lineplot(data=df) legend.legendHandles[0].set_linewidth(3.0) plt.legend(bbox_to_anchor=(1.05, 1), frameon=False, loc=2, borderaxespad=0.) s1 = np.array([1,0,1,0,1,0,1,0,1]) s2 = s1 + 1 plot_timeseries(s1,s2) 属性,该属性实际上将填充“聚合值”集合。虽然Eval()可以访问绑定值,但Aggregate集合仍为空,从而导致空值。

尝试将Aggregate添加到该列中。

Aggregate="Sum"

结果:

调试中AggregatesValues的键和值:

enter image description here enter image description here

数据显示示例:

enter image description here

BIG拇指同意您提出的所有详细信息!对此案进行调查真是太好了!