RadGrid不会在ItemCommand事件上触发回发

时间:2009-10-12 13:36:47

标签: asp.net rad-controls

我目前正在评估来自Telerik的一些RAD控件,就在我现在正在试验RadGrid。

所以我有我的网格控件并启用了客户端绑定以获得Ajax支持。我创建了一个适当的WCF web服务来获取数据等。一切都很好,包括分页等。现在我想要一个按钮列来删除一些项目。我注册了网格的OnItemCommand事件,并在服务器端相应地实现了它。我的ASPx代码如下所示:

<telerik:RadGrid runat="server" ID="RadGrid1" AllowPaging="True" AllowSorting="True"
    AutoGenerateColumns="False" GridLines="None"
    OnItemCommand="RadGrid1_ItemCommand">
    <MasterTableView DataKeyNames="Id" ClientDataKeyNames="Id">
        <Columns>
            <telerik:GridBoundColumn DataField="Firstname" HeaderText="Firstname" DataType="System.String">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Lastname" HeaderText="Lastname" DataType="System.String">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Age" HeaderText="Age" DataType="System.Int32">
            </telerik:GridBoundColumn>
            <telerik:GridButtonColumn CommandName="Delete" Text="Delete" UniqueName="DeleteColumn"
                ButtonType="ImageButton">
            </telerik:GridButtonColumn>
        </Columns>
        <PagerStyle Mode="Slider" />
    </MasterTableView>
    <ClientSettings>
        <DataBinding SelectMethod="GetSampleData" Location="Webservice/GridData.svc" SortParameterType="String">
        </DataBinding>
    </ClientSettings>
</telerik:RadGrid>

但是,当点击网格行上的相应按钮时,事件不会被触发,基本上没有回发到服务器。我找到的解决方案是将“EnablePostBackOnRowClick=true”添加到ClientSettings,但这会导致对每行上的每次点击进行回发,这不是真正需要的。

有没有更好的方法来实现这一点,或者是否有人提示可能是什么问题?

THX

5 个答案:

答案 0 :(得分:2)

根据答案from the Telerik forum,这似乎是不可能的。

答案 1 :(得分:2)

您需要处理客户端“OnCommand”事件,或者更恰当地使用客户端“RowDataBound”命令。在RowDataBound命令中,您可以找到您的rad按钮并将事件附加到它。

执行此操作的唯一方法是从按钮本身处理客户端“onclicking”事件。

绑定到OnCommand和Row DataBound的示例:
<ClientSettings> <ClientEvents OnCommand="Grid_Command" OnRowDataBound="Grid_RowDataBound" /> </ClientSettings> 然后在你的包含在rad代码块中的javascript中有以下方法:

<script type="javascript">
function Grid_RowDataBound(sender, args) {
    var item = args.get_item();
    var data = args.get_dataItem();
    var btn = $find('DeleteColumn');
    btn.add_clicking(delegate); // where delegate is the function you provide for the click
    // ... //
 }

`

答案 2 :(得分:1)

我意识到这很古老,但它仍然在Google搜索结果中显示出来。 现在有一个解决方案,也许还有其他人......

您可以使用模板列

来实现回发
<telerik:GridTemplateColumn UniqueName="myuniquename">
<ItemTemplate>
    <telerik:RadButton ID="RadButton1" runat="server" ButtonType="StandardButton" AutoPostBack="true" CommandName="MyCommand" UseSubmitBehavior="false" Text="Button Text" />
</ItemTemplate>
</telerik:GridTemplateColumn>

虽然我不确定您是否需要“UseSubmitBehavior”属性。

答案 3 :(得分:0)

我对telerik控件有同样的问题。我通过使用新名称从零重新创建Control,然后重建我的结构来解决这个问题。

希望有所帮助

答案 4 :(得分:0)

RegisterWithScriptManager =“false”这可能也有效..