3

RadGridインスタンスに複数のフッター行を追加する必要があります。ただし、今のところ、2 つ目を追加したいだけです。私は現在、単一のフッター行を持っています。記録のために、それは機能し、完全に表示されています。

Telerik フォーラムで次の関連する質問を見つけて実装しようとしましたが、機能しません。コードが実行され、新しいFooterItemものが追加されますControlsが、2 行目が表示されません。理由を見つける必要があり、誰かがその問題を解決するのを手伝ってくれたらありがたいです.

ASP グリッド コード

<div id="OrderMainContent">
    <telerik:RadAjaxManager runat="server" ID="RadAjaxManager1">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadGrid1" />
            <telerik:AjaxSetting AjaxControlID="txtQuantity">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>
    <telerik:RadInputManager ID="RadInputManager1" runat="server">
        <telerik:NumericTextBoxSetting BehaviorID="NumericBehavior1" Type="Number" DecimalDigits="0">
            <TargetControls>
                <telerik:TargetInput ControlID="RadGrid1" />
            </TargetControls>
        </telerik:NumericTextBoxSetting>
    </telerik:RadInputManager>
    <telerik:RadGrid ID="RadGrid1" runat="server" Skin="Sunset" AllowSorting="True" AutoGenerateColumns="False"
        GridLines="None" ShowFooter="True" OnItemDataBound="RadGrid1_ItemDataBound" OnPreRender="RadGrid1_PreRender">
        <MasterTableView DataKeyNames="ProductID" TableLayout="Fixed">
            <RowIndicatorColumn>
                <HeaderStyle Width="20px"></HeaderStyle>
            </RowIndicatorColumn>
            <ExpandCollapseColumn>
                <HeaderStyle Width="20px"></HeaderStyle>
            </ExpandCollapseColumn>
            <Columns>
                <telerik:GridBoundColumn UniqueName="colProduct" HeaderText="<%$ Resources: SiteLabels, ProductOrderForm.lblProduct %>"
                    HeaderStyle-HorizontalAlign="Center" DataField="ProdDesc">
                    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
                </telerik:GridBoundColumn>
                <telerik:GridTemplateColumn UniqueName="colQuantity" HeaderText="<%$ Resources: SiteLabels, ProductOrderForm.lblQuantity %>"
                    HeaderStyle-HorizontalAlign="Center" DataField="OrderQty" ColumnEditorID="txtQuantity">
                    <HeaderStyle Width="90" />
                    <ItemStyle Width="90px" />
                    <ItemTemplate>
                        <asp:TextBox ID="txtQuantity" runat="server" Width="50px" OnTextChanged="txtQuantity_TextChanged"
                            AutoPostBack="true">
                        </asp:TextBox>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn UniqueName="colPrice" HeaderText="<%$ Resources: SiteLabels, ProductOrderForm.lblBasePrice %>"
                    HeaderStyle-HorizontalAlign="Center" DataField="ProdUnitPrice">
                    <HeaderStyle Width="80px" />
                    <ItemStyle Width="80px" />
                    <ItemTemplate>
                        <asp:Label ID="lblPrice" runat="server" Text='<%# Eval("ProdUnitPrice") %>' />
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridBoundColumn UniqueName="colNotes" HeaderText="<%$ Resources: SiteLabels, ProductOrderForm.lblNotes %>"
                    HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="200px" />
                    <ItemStyle Width="200px" />
                </telerik:GridBoundColumn>
            </Columns>
        </MasterTableView>
        <ClientSettings>
            <Scrolling AllowScroll="True" UseStaticHeaders="True" />
        </ClientSettings>
    </telerik:RadGrid>
</div>

関連するコード ビハインド

    protected void RadGrid1_PreRender(object sender, EventArgs e)
    {
        AddFooterRow(sender as RadGrid);
    }

    private void AddFooterRow(RadGrid grid)
    {
        if (grid != null)
        {
            GridItem[] footerItems = grid.MasterTableView.GetItems(GridItemType.Footer);

            if (footerItems.Count() == 1)
            {
                GridTFoot foot = footerItems[0].Parent.Controls[0].Parent as GridTFoot;

                for (int i = 0; i < foot.Controls.Count; i++)
                {
                    GridFooterItem item = foot.Controls[i] as GridFooterItem;

                    if(item != null)
                    {
                        lastFooterPos = i;
                        break;
                    }
                }

                GridFooterItem existingFooter = foot.Controls[lastFooterPos] as GridFooterItem;
                GridFooterItem newFooterItem = new GridFooterItem(grid.MasterTableView, 0, 0);

                foreach(TableCell fc in existingFooter.Cells)
                {
                    TableCell newFooterCell = new TableCell();
                    newFooterCell.Text = "allo";
                    newFooterItem.Cells.Add(newFooterCell);
                }

                foot.Controls.AddAt(lastFooterPos + 1, newFooterItem);
            }
        }
    }

もちろん、さらに精度が必要な場合は、お問い合わせください。ご協力ありがとうございました。

4

2 に答える 2

1

Telerik のドキュメントを検索した結果、これが可能であるだけではないと確信しています。この質問では、たとえば Telerik の管理者は、「RadGrid はデータ バインド コントロールであり、その項目はデータ ソース内のレコードに基づいて作成され、データ ソース データを表示すると明確に述べています。したがって、グリッドに新しい行を追加するには、データソースに新しいレコードを追加し、グリッドを再バインドする必要があります。

そこで、私の問題を回避するために、グリッドのフッターを削除し、その下に新しいグリッドを追加することにしました。これを、イベント ハンドラーDataTableのコードで作成するダミーにバインドします。Page_Load値は、Javascript を介してクライアント側で決定されるか、単にそのダミー テーブルの行に挿入されます。

誰かがよりエレガントな解決策を見つけた場合、私はそれについて知りたいと思っています! しかし、今は仕事を進めなければなりません。

于 2013-03-22T19:00:40.353 に答える