2

いくつかのチェックボックスとフッター行を持つテレリック コントロールを使用して radgrid を設計しました。

 <telerik:RadGrid ID="RadGridCustomers" runat="server"  
                    AutoGenerateColumns="False" CellSpacing="0" GridLines="None"  
                    Height="300px"  ShowFooter="true">
  <HeaderTemplate>
               <asp:CheckBox ID="chkSelectAll" runat="server"   
                  OnCheckedChanged="ToggleSelectedState" AutoPostBack="true" />
  </HeaderTemplate>

        <ItemTemplate>
            <asp:CheckBox ID="CheckBoxSelectedCustomer" runat="server" 
         OnCheckedChanged="ToggleRowSelection"/>
        </ItemTemplate>
         <ItemStyle Width="25px" Wrap="true" />
         <HeaderStyle Width="25px" />
    </telerik:GridTemplateColumn>
     <telerik:GridBoundColumn DataField="Customers_Id" 
        FilterControlAltText="Filter column column" HeaderText="Id" 
        UniqueName="column" Visible="true">

    </telerik:GridBoundColumn>
    <telerik:GridBoundColumn DataField="NominatedLoad" 
        FilterControlAltText="Filter column1 column" HeaderText="Nominated MW" 
        UniqueName="NominatedLoad" Aggregate="Sum">
            <HeaderStyle Wrap="true" Width="75px" HorizontalAlign="Center" />
         <ItemStyle Width="75px" />
    </telerik:GridBoundColumn>

ご覧のとおり、ID、名前 (ここにはコードを入れませんでした。不要だと思いました)、指名されたフィールドがあります。指名されたフィールドには集計属性があります。デフォルトでは、グリッドですべてのチェックボックスがオンになっているグリッドをロードします。問題は、ユーザーがチェックボックスをオフにするたびに、フッターの値が自動的に更新されることです。だから、私はこのイベントを書き始めました

   protected void ToggleRowSelection(object sender, EventArgs e)
    {
        ((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as 
            CheckBox).Checked;
        GridFooterItem footer = (GridFooterItem)
                   RadGridCustomers.MasterTableView.GetItems(GridItemType.Footer)[2];
        int totalLoad = Convert.ToInt32(footer["ActualLoad"].Text.Split(':')[1]);
        CheckBox chk = FindControl("CheckBoxSelectedCustomer") as CheckBox;
        foreach (GridDataItem data in RadGridCustomers.MasterTableView.Items)
        {
            if (chk.Checked == true)
            {
                //footer["ActualLoad"].Text = footer.Attributes.Add('Aggregate',                 }
        }

しかし、ブロックがフッター行を更新する方法を知らない場合、私は一種の下部に打たれました.これを終了する方法を教えてください.

また、この状況を jquery を使用して行う必要があるのか​​、それとも C# で行う必要があるのか​​を教えてください。

4

1 に答える 1

0

はい、可能です!集計をカスタムとして配置する必要があります! この2つの関数を使用します(これらは例であり、コードをそれに合わせてください)

Public void RgDueBalance_CustomAggregate(object sender, GridCustomAggregateEventArgs e)
        {
            e.Result = 0;
        }
        protected void CheckBox1_Changed(object sender, EventArgs e)
        {
            GridFooterItem footerItem = rgDueBalance.MasterTableView.GetItems(GridItemType.Footer)[0] as GridFooterItem;
            double pageSum = double.Parse(footerItem["MontMI"].Text.Replace("Total:", ""));
            CheckBox checkBox = sender as CheckBox;
            GridDataItem dataItem = checkBox.NamingContainer as GridDataItem;
            double value = double.Parse(dataItem["MontMI"].Text);

            if (checkBox.Checked)
            {
                pageSum += value;
            }
            else
            {
                pageSum -= value;
            }
            footerItem["MontMI"].Text = "Total: " + pageSum;
        }

これが行うことは、1 つのチェック ボックスをオンにすると値が合計され、オフの場合はその逆になります。それがあなたを助けることを願っています!

于 2012-09-28T14:12:39.620 に答える