我有一個用戶控件包含一個RadGrid和一個RadToolBar控件(如下)。RadGrid ItemDataBound事件導致另一個事件被忽略
<telerik:RadToolBar ID="RadToolBar1" runat="server" Skin="Web20" style="width:100%;" OnButtonClick="RadToolBar1_ButtonClick">
<Items>
<telerik:RadToolBarButton ImageUrl="~/[path_omitted]/SaveRadToolBar1.png" Text="Save" ToolTip="Save" />
</Items>
</telerik:RadToolBar>
<telerik:RadGrid ID="RadGrid1" runat="server" Skin="Vista" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource">
<MasterTableView CommandItemDisplay="None" Height="30" DataKeyNames="ID" ClientDataKeyNames="ID" GroupLoadMode="Client" NoMasterRecordsText="You do not have any data">
<GroupByExpressions>
<telerik:GridGroupByExpression>
<GroupByFields>
<telerik:GridGroupByField FieldName="Topic.Category.Name" />
</GroupByFields>
<SelectFields>
<telerik:GridGroupByField FieldName="Topic.Category.Name" HeaderText="Category" />
</SelectFields>
</telerik:GridGroupByExpression>
</GroupByExpressions>
<Columns>
<telerik:GridBoundColumn DataField="ID" HeaderText="ID" UniqueName="DataID" Visible="false" />
<telerik:GridBoundColumn DataField="Topic.ID" UniqueName="DataTopicID" Visible="false" />
<telerik:GridBoundColumn DataField="Topic.Category.Name" HeaderText="Name" UniqueName="DataCategoryName" Visible="false" />
<telerik:GridBoundColumn DataField="Topic.Name" HeaderText="Topic" UniqueName="DataTopicName" />
<telerik:GridTemplateColumn HeaderText="Go" UniqueName="DataGoTo" HeaderStyle-Width="50">
<ItemTemplate>
<asp:Button ID="ButtonGoTo" runat="server" ToolTip="Go to data" Text="Go" />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
的RadToolBar ButtonClick事件inits回發來保存網頁的內容(網頁包含其他控件,例如下拉列表,文本框等,但沒有涉及到,我遇到的問題)。通過上面的代碼,一切都按預期工作(RadToolBar ButtonClick事件處理程序被調用並保存頁面上的內容)。
當我爲RadGrid的ItemDataBound事件添加一個事件處理程序時發生問題(請參見下文)。
<telerik:RadGrid ID="RadGrid1" runat="server" Skin="Vista" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource" OnItemDataBound="RadGrid1_ItemDataBound">
<MasterTableView CommandItemDisplay="None" Height="30" DataKeyNames="ID" ClientDataKeyNames="ID" GroupLoadMode="Client" NoMasterRecordsText="You do not have any data">
<GroupByExpressions>
<telerik:GridGroupByExpression>
<GroupByFields>
<telerik:GridGroupByField FieldName="Topic.Category.Name" />
</GroupByFields>
<SelectFields>
<telerik:GridGroupByField FieldName="Topic.Category.Name" HeaderText="Category" />
</SelectFields>
</telerik:GridGroupByExpression>
</GroupByExpressions>
<Columns>
<telerik:GridBoundColumn DataField="ID" HeaderText="ID" UniqueName="DataID" Visible="false" />
<telerik:GridBoundColumn DataField="Topic.ID" UniqueName="DataTopicID" Visible="false" />
<telerik:GridBoundColumn DataField="Topic.Category.Name" HeaderText="Name" UniqueName="DataCategoryName" Visible="false" />
<telerik:GridBoundColumn DataField="Topic.Name" HeaderText="Topic" UniqueName="DataTopicName" />
<telerik:GridTemplateColumn HeaderText="Go" UniqueName="DataGoTo" HeaderStyle-Width="50">
<ItemTemplate>
<asp:Button ID="ButtonGoTo" runat="server" ToolTip="Go to data" Text="Go" />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem dataItem = e.Item as GridDataItem;
(dataItem["DataGoTo"].FindControl("ButtonGoTo") as Button)
.PostBackUrl = String.Format(
"~/ShowData.aspx?id={0}",
dataItem["DataTopicID"].Text);
}
}
我用這個處理程序來設置一個按鈕控件(我這樣做是對這個事件,因爲我需要的radgrid控件的行內容的ID)的一項PostBackUrl。問題是RadToolBar ButtonClick事件處理程序不再被調用。
隨着一切正常,事件序列爲:Load - > NeedDataSource - > ButtonClick。在添加ItemDataBound事件之後,序列是Load - > NeedDataSource - > ItemDataBound(ButtonClick事件被「忽略」)。
爲什麼在RadGrid中添加ItemDataBound事件會影響RadToolBar中的ButtonClick事件?如何在保持ItemDataBound事件的同時讓ButtonClick事件「不被忽略」?
謝謝。
嘗試通過try/catch-block來包圍RadGrid1_ItemDataBound。 – vladimir77
謝謝,但我的問題是不與事件處理程序RadGrid1_ItemDataBound。我的問題是,RadToolBar ButtonClick事件處理程序(未顯示)沒有被擊中。 – oonyalo