2009-10-12 43 views
2

我目前正在評估Telerik的一些RAD控件,就在現在我正在試驗RadGrid。RadGrid沒有在ItemCommand事件上觸發回發

所以我有我的網格控制和啓用客戶端綁定有Ajax支持。我創建了一個合適的WCF webservice來獲取數據等。一切工作都很好,包括分頁等。現在我想要一個按鈕列來刪除一些項目。我註冊了網格的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

+0

我不明白。你想回發發生或不?你的描述是矛盾的:「事件沒有被解僱,基本上沒有向服務器回傳正在完成......但是這會導致每次點擊一個回發,這並不是真正需要的」 – Bryan 2009-10-12 23:43:38

+0

問題是如果我啓用「EnablePostBackOnRowClick」,則只需單擊該行上的任意位置即可完成回發。我想在按下其中一個動作按鈕時觸發回發。 – Juri 2009-10-13 06:30:41

回答

0

我有與telerik控件相同的問題。我通過用一個新名稱重新創建零控件來解決這個問題,然後重建我的結構。

希望它可以幫助

2

你需要處理客戶端的「按需」事件,或者更恰當地使用客戶端「的RowDataBound」命令。在RowDataBound命令中,您可以找到您的rad按鈕併爲其添加一個事件。

要做到這一點的唯一方法是從按鈕本身處理客戶端「onclicking」事件。

結合到按需和行數據綁定示例:
<ClientSettings> <ClientEvents OnCommand="Grid_Command" OnRowDataBound="Grid_RowDataBound" /> </ClientSettings> 然後,在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 
    // ... // 
} 

`

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」屬性。

0

RegisterWithScriptManager =「false」這可能也適用。