Событие RadGrid ItemDataBound вызывает игнорирование другого события - PullRequest
0 голосов
/ 12 августа 2011

У меня есть пользовательский элемент управления, содержащий 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> 

Событие RadCoolBar ButtonClick инициирует обратную передачу для сохранения содержимого страницы (страница содержит другие элементы управления, такие каккак раскрывающийся список, текстовое поле и т. д., но ни один из них не связан с проблемой, с которой я столкнулся).С помощью приведенного выше кода все работает как положено (вызывается обработчик события RadToolBar ButtonClick и содержимое страницы сохраняется).

Проблема возникает, когда я добавляю обработчик события для события ItemDataBound в RadGrid (см. Ниже).

<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); 
    } 
}

Я использую этот обработчик для установки PostBackUrl элемента управления Button (я делаю это для этого события, потому что мне нужен идентификатор содержимого строки RadGrid).Проблема в том, что обработчик событий RadToolBar ButtonClick больше не вызывается.

Когда все работает, последовательность событий выглядит так: Load -> NeedDataSource -> ButtonClick.После добавления события ItemDataBound последовательность имеет вид Load -> NeedDataSource -> ItemDataBound (событие ButtonClick «игнорируется»).

Почему добавление события ItemDataBound в RadGrid влияет на событие ButtonClick в RadToolBar?Как я могу сделать так, чтобы событие ButtonClick «не игнорировалось» при сохранении события ItemDataBound?

Спасибо.

1 Ответ

0 голосов
/ 01 сентября 2011
  1. не существует onClick =" yourHandlerName " для вашего события нажатия кнопки.

  2. вы можете использовать telerik GridButtonColumn столбец и установить CommandName = "DoDomething" и запустить его в обработчике событий OnItemCommand="Grid1_ItemCommand вашей сетки.

...