コールバック モードの階層データ グリッドがあります。
<ComponentArt:DataGrid ID="dgBL" runat="server" AllowColumnResizing="true" EmptyGridText="There is no data to display!"
LoadingPanelPosition="MiddleCenter" PagerStyle="Numbered" RunningMode="Callback" SearchOnKeyPress="true"
ShowFooter="true" ShowHeader="true" ShowSearchBox="true" AutoTheming="true" PreloadLevels="false"
GroupingNotificationText="Business Lines and their Departments" FillContainer="false" Width="60%"
Height="468px" AllowVerticalScrolling="true" AllowMultipleSelect="false">
<Levels>
<ComponentArt:GridLevel AllowGrouping="false" DataKeyField="BLID" AllowReordering="false">
<Columns>
<ComponentArt:GridColumn DataField="BLID" Visible="false" Width="1" />
<ComponentArt:GridColumn DataField="Name" HeadingText="Business Line Name" Visible="true" />
<ComponentArt:GridColumn DataField="DepartmentCount" HeadingText="Department Count" Visible="true" Width="140" />
<ComponentArt:GridColumn DataField="IsActive" HeadingText="Is Active" Visible="true" Width="80" />
<ComponentArt:GridColumn Align="Center" AllowSorting="False" DataCellServerTemplateId="AddDepartmentTemplate"
HeadingText="Add Department" Width="100" />
</Columns>
</ComponentArt:GridLevel>
<ComponentArt:GridLevel AllowGrouping="false" DataKeyField="DepartmentID" AllowReordering="false">
<Columns>
<ComponentArt:GridColumn DataField="DepartmentID" Visible="false" Width="30" />
<ComponentArt:GridColumn DataField="DepartmentName" HeadingText="Department Name" Visible="true" />
<ComponentArt:GridColumn DataField="Transit" HeadingText="Transit" Visible="true" Width="80" />
<ComponentArt:GridColumn DataField="BLID" Visible="false" Width="30" />
<ComponentArt:GridColumn DataField="IsActive" HeadingText="Is Active" Visible="true" Width="80" />
<ComponentArt:GridColumn Align="Center" AllowSorting="False" DataCellServerTemplateId="EditDepartmentTemplate1"
HeadingText="Edit" Width="80" />
</Columns>
</ComponentArt:GridLevel>
</Levels>
<ServerTemplates>
<ComponentArt:GridServerTemplate ID="AddDepartmentTemplate">
<Template>
<asp:ImageButton ID="addNewDepartment" runat="server" ImageUrl="~/App_Themes/OnlineForms/Images/add.png"
OnClick="DGBL_AddNewDepartment_Click" Width="16" Height="16" CssClass="VerticalAlignMiddle" AlternateText="Add a Department for selected business"
ToolTip="Add a Department for selected business" />
</Template>
</ComponentArt:GridServerTemplate>
<ComponentArt:GridServerTemplate ID="EditDepartmentTemplate1">
<Template>
<asp:ImageButton ID="imgEditDepartment" runat="server" ImageUrl="../App_Themes/OnlineForms/Images/edit.gif"
OnClick="imgEditDepartment_Click" CssClass="VerticalAlignMiddle" AlternateText="Edit selected Department"
ToolTip="Edit selected Department" />
</Template>
</ComponentArt:GridServerTemplate>
</ServerTemplates>
両方のレベルが読み込まれ、最上位レベルの 1 つが展開されて内部レベルが表示され、addNewDepartment がクリックされると、そこにキャンセル ボタンが表示されます。次のようなエラー メッセージが表示されます。
Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: System.Data.Entity.DynamicProxies.BusinessLine_29A53EE537AE4FBDCCCC328C86AED34485458642B12DFD38012946895CAB887D 型のオブジェクトにプロパティが見つかりません
BusinessLine は、最上位の GridLevel の DataSource に List として提供されるデータ オブジェクトです。
CS コード スニペットは次のとおりです。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dgBL.PageSize = Convert.ToInt32(ConfigurationManager.AppSettings[CommonConstants.DEFAULT_PAGE_SIZE]);
dgBL.NeedDataSource += new Grid.NeedDataSourceEventHandler(dgBL_NeedDataSource);
dgBL.NeedRebind += new Grid.NeedRebindEventHandler(dgBL_NeedRebind);
dgBL.NeedChildDataSource += new Grid.NeedChildDataSourceEventHandler(dgBL_NeedChildDataSource);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dgBL.DataSource = GetAllBusinessLines();
dgBL.DataBind();
}
}
private void dgBL_NeedChildDataSource(object sender, GridNeedChildDataSourceEventArgs e)
{
int blID = Convert.ToInt32(e.Item["BLID"]);
UserManager um = new UserManager();
e.DataSource = um.getAllDepartments(blID);
}
protected void dgBL_NeedDataSource(object sender, EventArgs e)
{
dgBL.DataSource = GetAllBusinessLines();
}
protected void dgBL_NeedRebind(object sender, EventArgs e)
{
dgBL.DataBind();
}
protected void dgBL_PageIndexChanged(object sender, ComponentArt.Web.UI.GridPageIndexChangedEventArgs e)
{
throw new NotImplementedException();
}
protected void DGBL_AddNewDepartment_Click(object sender, EventArgs e)
{
lblAddEditDepartment.InnerText = "Add Department";
ShowControls(true);
LoadDropDowns(getCurrentBLID());
}
protected void btnCancel_Click(object sender, EventArgs e)
{
dgBL.DataSource = GetAllBusinessLines();
dgBL.DataBind();
}
どんな助けでも大歓迎です。
編集: 以前のバージョンでこれを解決するメソッド呼び出しを見つけました:
Grid1.TableCache = null; // clear out cached child data
Grid1.callback();
しかし、コンポーネント アート データグリッドの 2012 バージョンには存在しません。これが 2012 年版でどのように処理されるかを誰かが知っていれば、問題は解決すると思います。