2011-08-12 64 views
0

我有一個用戶控件包含一個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事件「不被忽略」?

謝謝。

+0

嘗試通過try/catch-block來包圍RadGrid1_ItemDataBound。 – vladimir77

+0

謝謝,但我的問題是不與事件處理程序RadGrid1_ItemDataBound。我的問題是,RadToolBar ButtonClick事件處理程序(未顯示)沒有被擊中。 – oonyalo

回答

0
  1. 沒有onClick =" yourHandlerName "您的buttonclick事件被解僱。

  2. 您可以使用telerik GridButtonColumn列並設置CommandName = "DoDomething"並將其放入網格的事件處理程序中。