2

我正在使用 Telerik RadGrid 来显示和编辑分层数据。这听起来可能很奇怪——其中一项要求是在单击父行中的链接时,在插入模式下打开子详细信息网格。这需要两件事。子网格的扩展,并以插入模式加载此网格。

到目前为止,这是我使用 Telerik 文档中的建议所尝试的;但是,当调用 rebind 说子详细信息网格找不到它的 linqDataSourceControl 时,这不起作用并引发异常;但是,当下面的代码正在执行时,这个控件确实存在(我检查过)。

从父行命令按钮以插入模式打开子 DetailGridView 的解决方案是什么?

标记:

...
    <DetailTables>
        <telerik:GridTableView>
        ...
        <Columns>
            <ItemTemplate>
                <asp:LinkButton ID="addChildVendorRating" runat="server" CommandName="AddNewChildRating" CausesValidation="false" CssClass="normal-link" CommandArgument='<%# Eval("VendorM2MEntityToQualID")%>'>[Add Rating]</asp:LinkButton>
            </ItemTemplate>
        </Columns>
        <DetailTables>
            <!-- I Need this to be be expanded and in insert mode when addChildVendorRating command link is clicked -->
            <telerik:GridTableView>
        </<DetailTables>

代码:

protected void gridRatings_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
    if (e.CommandName == "AddNewChildRating") {
                GridDataItem parentRow = e.Item as GridDataItem;
                GridTableView parentGridView = parentRow.GetClosestParentControlByType<GridTableView>();
                RadGrid parentGrid = parentGridView.GetClosestParentControlByType<RadGrid>();

                parentRow.Expanded = true;
                //parentGridView.HierarchyDefaultExpanded = true;
                //parentGridView.DetailTables[0].InsertItem();
                parentGridView.DetailTables[0].IsItemInserted = true;
                parentGridView.DetailTables[0].Rebind();
    }
}
4

1 回答 1

1

我想通了,希望这对其他人有帮助。解决方案是将命令处理程序 e.Item 强制转换为GridDataItem; 这使您可以访问NestedTableViews- 谜题的关键。这是与数据不同的实际连接的详细视图DetailTables。一旦你设置IsItemInserted它并重新绑定它,它就会像魅力一样工作。

这使您可以一次性扩展一个部分并将子部分置于插入模式。下面是完整的代码。

    protected void gridRatings_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "AddNewChildRating") {
                    GridDataItem parentRow = e.Item as GridDataItem;
                    GridTableView parentGridView = parentRow.GetClosestParentControlByType<GridTableView>();

                    if (parentGridView != null)
                    {
                        var targetGridView = ((GridDataItem)e.Item).ChildItem.NestedTableViews[0];
                        if (targetGridView != null)
                        {
                            parentRow.Expanded = true;
                            targetGridView.IsItemInserted = true;
                            targetGridView.Rebind();
                        }
                    }

}
于 2012-06-29T21:46:38.777 回答