RadGrid ItemDataBound事件导致忽略另一个事件

时间:2011-08-12 15:52:47

标签: asp.net event-handling telerik radgrid

我有一个包含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事件处理程序不再被调用。

一切正常,事件序列为:加载 - &gt; NeedDataSource - &gt; ButtonClick。添加ItemDataBound事件后,序列为Load - &gt; NeedDataSource - &gt; ItemDataBound(ButtonClick事件被“忽略”)。

为什么在RadGrid中添加ItemDataBound事件会影响RadToolBar中的ButtonClick事件?如何在仍然保持ItemDataBound事件的同时使ButtonClick事件“不被忽略”?

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 您的按钮点击事件没有onClick =" yourHandlerName "被解雇。

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