This is a migrated thread and some comments may be shown as answers.

Telerik RadGrid -> How SUM of (nvarchar) Column in footer?

9 Answers 142 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Peyman
Top achievements
Rank 1
Peyman asked on 05 Nov 2011, 08:28 PM
my radgrid(telerik) is like below :

<telerik:RadGrid ID="grdUsers" runat="server" GridLines="None" Skin="Vista" DataSourceID="sdsUsers"
       AllowPaging="True" AutoGenerateColumns="False" OnItemCommand="grdUsers_ItemCommand"
       Width="900px" AllowSorting="True" PageSize="20">
       <MasterTableView AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="sdsUsers">
           <DetailTables>
               <telerik:GridTableView runat="server" DataKeyNames="ID,User_ID" DataSourceID="sdsDownload"
                   ShowFooter="True">
                   <ParentTableRelation>
                       <telerik:GridRelationFields DetailKeyField="User_ID" MasterKeyField="ID" />
                   </ParentTableRelation>
                   <CommandItemSettings ExportToPdfText="Export to Pdf" />
                   <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
                       <HeaderStyle Width="20px" />
                   </RowIndicatorColumn>
                   <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
                       <HeaderStyle Width="20px" />
                   </ExpandCollapseColumn>
                   <Columns>
                       <telerik:GridBoundColumn DataField="ID" DataType="System.Int32" FilterControlAltText="Filter ID column"
                           HeaderText="ID" ReadOnly="True" SortExpression="ID" UniqueName="ID">
                       </telerik:GridBoundColumn>
                       <telerik:GridBoundColumn DataField="User_ID" DataType="System.Int32" FilterControlAltText="Filter User_ID column"
                           HeaderText="User_ID" SortExpression="User_ID" UniqueName="User_ID">
                       </telerik:GridBoundColumn>
 
                       <telerik:GridBoundColumn DataField="FileSize" FilterControlAltText="Filter FileSize column"
                           HeaderText="FileSize" SortExpression="FileSize" UniqueName="FileSize" Aggregate="Sum">
                       </telerik:GridBoundColumn>
                   </Columns>
                   <EditFormSettings>
                       <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                       </EditColumn>
                   </EditFormSettings>
               </telerik:GridTableView>
           </DetailTables>
           <CommandItemSettings ExportToPdfText="Export to Pdf"></CommandItemSettings>
           <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
               <HeaderStyle Width="20px"></HeaderStyle>
           </RowIndicatorColumn>
           <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" Visible="True">
               <HeaderStyle Width="20px"></HeaderStyle>
           </ExpandCollapseColumn>
           <Columns>
               <telerik:GridBoundColumn DataField="ID" FilterControlAltText="Filter ID column" HeaderText="ID"
                   SortExpression="ID" UniqueName="ID">
                   <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                   <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
               </telerik:GridBoundColumn>
               <telerik:GridBoundColumn DataField="FirstName" FilterControlAltText="Filter FirstName column"
                   HeaderText="FirstName" SortExpression="FirstName" UniqueName="FirstName">
                   <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                   <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
               </telerik:GridBoundColumn>
           </Columns>
           <EditFormSettings>
               <EditColumn FilterControlAltText="Filter EditCommandColumn column">
               </EditColumn>
           </EditFormSettings>
       </MasterTableView>
       <FilterMenu EnableImageSprites="False">
       </FilterMenu>
       <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default">
       </HeaderContextMenu>
   </telerik:RadGrid>

this is a Hierarchy grid with two tables (one master and one detail).
i have a column in detail table named (FileSize)!
this column in my database is nvarchar(50), i want to have sum of file sizes in the footer of detail table.
but after enabling Footer in this detail table and set aggregate of FileSize Column to Sum, i got an error that tells you can not have sum of object values!
is there a way for make sum of FileSize Column?

9 Answers, 1 is accepted

Sort by
0
Peyman
Top achievements
Rank 1
answered on 06 Nov 2011, 05:41 PM
would be appreciate for some help ...
0
Jayesh Goyani
Top achievements
Rank 2
answered on 06 Nov 2011, 06:42 PM
Hello,

foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
            {
                if (item.HasChildItems)
                {
                    item.Expanded = true;
 
                    int csum = 0;
                    foreach (GridDataItem citem in item.ChildItem.NestedTableViews[0].Items)
                    {
                        csum += Convert.ToInt32((citem.FindControl("Label2") as Label).Text);
                    }
 
                    GridFooterItem cfooter = (GridFooterItem)item.ChildItem.NestedTableViews[0].GetItems(GridItemType.Footer)[0];
                    cfooter["Name1"].Text = csum.ToString();
                }
            }

<DetailTables>
                    <telerik:GridTableView Name="ChildGrid">
                        <Columns>
                             
                            <telerik:GridTemplateColumn Aggregate="None" UniqueName="Name1">
                                <ItemTemplate>
                                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                        </Columns>
                    </telerik:GridTableView>
                </DetailTables>


Thanks,
Jayesh Goyani
0
Peyman
Top achievements
Rank 1
answered on 07 Nov 2011, 08:20 AM
thanks for answer dear Jayesh Goyani
but which event should i use?
also my grid have many child rows!
how can i unexpand them at first view?
0
Jayesh Goyani
Top achievements
Rank 2
answered on 07 Nov 2011, 09:12 AM
Hello,

Please used "RadGrid1_PreRender" event.

Method 1 for Unexpand :
void RadGrid1_PreRender(object sender, EventArgs e)
   {
       foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
       {
           if (item.HasChildItems)
           {
               item.Expanded = true;
 
               int csum = 0;
               foreach (GridDataItem citem in item.ChildItem.NestedTableViews[0].Items)
               {
                   csum += Convert.ToInt32((citem.FindControl("Label2") as Label).Text);
               }
 
               GridFooterItem cfooter = (GridFooterItem)item.ChildItem.NestedTableViews[0].GetItems(GridItemType.Footer)[0];
               cfooter["Name1"].Text = csum.ToString();
if (!IsPostBack)
{
               item.Expanded = false;
}
           }
       }

Method 2:
void RadGrid1_PreRender(object sender, EventArgs e)
    {
        foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
        {
            if (item.HasChildItems)
            {
                item.Expanded = true;
 
                int csum = 0;
                foreach (GridDataItem citem in item.ChildItem.NestedTableViews[0].Items)
                {
                    csum += Convert.ToInt32((citem.FindControl("Label2") as Label).Text);
                }
 
                GridFooterItem cfooter = (GridFooterItem)item.ChildItem.NestedTableViews[0].GetItems(GridItemType.Footer)[0];
                cfooter["Name1"].Text = csum.ToString();
                 
            }
        }
 
        foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
        {
            if (!IsPostBack)
            {
                item.Expanded = false;
 
            }
        }
 
    }


Thanks,
Jayesh Goyani
0
Peyman
Top achievements
Rank 1
answered on 07 Nov 2011, 09:31 AM
thanks again / but in this way when i expand a row in parent, couses expand all of rows !!!??? 
how can i fix that ?
0
Jayesh Goyani
Top achievements
Rank 2
answered on 07 Nov 2011, 09:42 AM
Hello,

try with below code let me know it works or not ??

void RadGrid1_PreRender(object sender, EventArgs e)
   {
       foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
       {
           if (item.HasChildItems)
           {
               bool flag = item.Expanded;
 
               item.Expanded = true;
 
               int csum = 0;
               foreach (GridDataItem citem in item.ChildItem.NestedTableViews[0].Items)
               {
                   csum += Convert.ToInt32((citem.FindControl("Label2") as Label).Text);
               }
 
               GridFooterItem cfooter = (GridFooterItem)item.ChildItem.NestedTableViews[0].GetItems(GridItemType.Footer)[0];
               cfooter["Name1"].Text = csum.ToString();
 
               item.Expanded = flag;
           }
       }
   }


Thanks,
Jayesh Goyani
0
Peyman
Top achievements
Rank 1
answered on 07 Nov 2011, 09:47 AM
thanks for helping me,
now it works perfect!
but was that necessary to expand items?(mean why?)
0
Accepted
Jayesh Goyani
Top achievements
Rank 2
answered on 07 Nov 2011, 09:57 AM
Hello,

i expand the row because if child grid's is not exists then it will create and set its aggregate value.

Please try with below code.

void RadGrid1_PreRender(object sender, EventArgs e)
   {
       foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
       {
           if (item.HasChildItems)
           {
               if( item.Expanded)
               {
               int csum = 0;
               foreach (GridDataItem citem in item.ChildItem.NestedTableViews[0].Items)
               {
                   csum += Convert.ToInt32((citem.FindControl("Label2") as Label).Text);
               }
  
               GridFooterItem cfooter = (GridFooterItem)item.ChildItem.NestedTableViews[0].GetItems(GridItemType.Footer)[0];
               cfooter["Name1"].Text = csum.ToString();
  
           }
           }
       }
   }


Thanks,
Jayesh Goyani
0
Peyman
Top achievements
Rank 1
answered on 07 Nov 2011, 10:10 AM
now it's a clean code and has no problems!
Tags
Grid
Asked by
Peyman
Top achievements
Rank 1
Answers by
Peyman
Top achievements
Rank 1
Jayesh Goyani
Top achievements
Rank 2
Share this question
or