2013-07-02 55 views
0

我有一個客戶端radgrid與選擇列和一些其他列。當選中所有複選框時,它會嘗試檢查網格中的所有行。我不希望它選擇每一行,除非它遵守某些條件,所以我添加了一些JavaScript來做到這一點。 因爲它可能不會選擇所有行,所以不選擇全選複選框。我想在這裏選中全選複選框,這樣當它被取消選中時,它將刪除所有選中的行。 尋找一種方法來獲得全選複選框或類似的東西的點擊事件。我不相信有一個與它相關的OnClick事件,但我可能是錯的?攔截選擇客戶端網格上的所有複選框事件

回答

0

請嘗試使用下面的代碼片段。

.ASPX

<head runat="server"> 
<title></title> 
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> 
    <script type="text/javascript"> 

     function SelecteHeaderItemClick(obj) { 

      alert('Header Item Checked'); 


      var grid = $find("<%= RadGrid1.ClientID %>"); 
      if (grid) { 
       var MasterTable = grid.get_masterTableView(); 
       var Rows = MasterTable.get_dataItems(); 
       for (var i = 0; i < Rows.length; i++) { 
        var row = Rows[i]; 
        if (parseInt(row.getDataKeyValue('ID')) != 1) 
         row.set_selected($(obj).is(':checked')); 
       } 
      } 
     } 
     function SelecteItemClick() { 
      alert('Item Checked'); 
     } 
    </script> 
</telerik:RadCodeBlock> 

.ASPX.CS

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) 
{ 
    dynamic data = new[] { 
     new { ID = 1, Name ="Name1"}, 
     new { ID = 2, Name = "Name2"}, 
     new { ID = 3, Name = "Name3"}, 
     new { ID = 4, Name = "Name4"}, 
     new { ID = 5, Name = "Name5"} 
    }; 

    RadGrid1.DataSource = data; 
} 


protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) 
{ 
    if (e.Item is GridDataItem) 
    { 
     GridDataItem item = e.Item as GridDataItem; 
     (item["SelectColumn"].Controls[0] as CheckBox).Attributes.Add("onclick", "SelecteItemClick();"); 
    } 

    if (e.Item is GridHeaderItem) 
    { 
     GridHeaderItem item = e.Item as GridHeaderItem; 
     (item["SelectColumn"].Controls[0] as CheckBox).Attributes.Add("onclick", "SelecteHeaderItemClick(this);"); 
    } 
}