【问题标题】:RadGrid not firing postback on ItemCommand eventsRadGrid 没有在 ItemCommand 事件上触发回发
【发布时间】:2009-10-12 13:36:47
【问题描述】:

我目前正在评估 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,但这会导致每次点击一行时都会回发,这并不是真正需要的。

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

谢谢

【问题讨论】:

  • 我不明白。你想要回发还是不发生???您的描述是矛盾的:“事件没有被触发,基本上没有回发到服务器。......但这会导致每次点击一行时都会回发,这并不是真正需要的”
  • 问题是,如果我启用“EnablePostBackOnRowClick”,只需单击行上的任意位置即可完成回发。我想在按下其中一个操作按钮时触发回发。

标签: asp.net rad-controls


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    唯一的其他方法是从按钮本身处理客户端“onclicking”事件。

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

    <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
        // ... //
     }
    

    `

    【讨论】:

      【解决方案3】:

      我知道这很古老,但它仍然在 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”属性。

      【讨论】:

        【解决方案4】:

        我在使用 Telerik 控件时遇到了同样的问题。我通过使用新名称从零重新创建控件,然后重建我的结构来解决了这个问题。

        希望对你有帮助

        【讨论】:

          【解决方案5】:

          RegisterWithScriptManager="false" 这也可以工作..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-05
            • 1970-01-01
            相关资源
            最近更新 更多