RadGrid itemdataboundevent导致另一个事件被忽略



我有一个用户控件,它包含一个RadGrid和一个RadToolBar控件(如下)。

<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事件初始化回发以保存页面的内容(页面包含其他控件,如下拉列表,文本框等,但没有一个与我所遇到的问题相关)。有了上面的代码,一切都如预期的那样工作(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); 
    } 
}

我使用这个处理程序来设置Button控件的PostBackUrl(我在这个事件上这样做是因为我需要RadGrid的行内容的ID)。问题是RadToolBar ButtonClick事件处理程序不再被调用。

在一切正常工作的情况下,事件顺序是:Load -> NeedDataSource -> ButtonClick。添加ItemDataBound事件后,顺序是Load -> NeedDataSource -> ItemDataBound (ButtonClick事件被"忽略")。

为什么在RadGrid中添加ItemDataBound事件会影响RadToolBar中的ButtonClick事件?我怎样才能得到ButtonClick事件"不被忽略",同时仍然保持ItemDataBound事件?

谢谢。

  1. 没有onClick =" yourHandlerName "为您的按钮点击事件被触发

  2. 您可以使用teleerik GridButtonColumn列并设置CommandName = "DoDomething"并在您的网格的OnItemCommand="Grid1_ItemCommand事件处理程序中触发它。

相关内容

  • 没有找到相关文章

最新更新