2012-04-07 111 views
0

我有一個GridView模板字段。我在templatefield中添加一個複選框。 Autopostback適用於複選框。Gridview在CheckedChanged後不刷新?

我在Load-page和creted列動態填充網格。

if (!IsPostBack) 
     { 
     FillGrid(); 
     } 

我使用更新面板

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<SharePoint:SPGridView ID="grid" AllowSorting="true" AllowFiltering="true" CssClass="ms-listviewtable" 
runat="server" AutoGenerateColumns="false"> 
<RowStyle CssClass="ms-alternating" Height="10px" /> 
<Columns> 
    <asp:TemplateField> 
     <ItemTemplate > 
      <asp:CheckBox ID="select" runat="server" 
       OnCheckedChanged="select_CheckedChanged" AutoPostBack="true" /> 
      <input id="Display" type="hidden" runat="server" /> 
      <input id="itemID" type="hidden" runat="server" /> 
      <asp:Image ID="icon" runat="server" Height="10px" Visible="false" /> 
     </ItemTemplate> 
     <ItemStyle Width="35px" /> 
    </asp:TemplateField> 
    <asp:TemplateField > 
    </asp:TemplateField> 
</Columns> 
</SharePoint:SPGridView> 
</ContentTemplate> 
    <Triggers> 
<asp:AsyncPostBackTrigger ControlID="select" EventName="OnCheckedChanged" /> 
</Triggers> 
</asp:UpdatePanel> 

但顯示錯誤:與ID控制「選擇」找不到在UpdatePanel的「UpdatePanel1」觸發。

我的問題是:當複選框變化,頁面刷新

我不想checkedchange後刷新頁面!

+0

如果自動回是真正的複選框,然後頁面會刷新,你可以嘗試使用更新面板部分頁面刷新 – freebird 2012-04-07 05:56:48

+0

我使用更新面板。 PLZ查看問題,我編輯 – 2012-04-07 06:03:51

+0

你的FillGrid方法是什麼樣的?所以有一個類似的問題http://stackoverflow.com/questions/5476766/updatepanel-gridview-not-updating – 2012-04-07 06:05:34

回答

0

首先,你需要templetecolumn如下

<asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkselect" runat="server" /> 
       <input id="Display" type="hidden" runat="server" /> 
       <input id="itemID" type="hidden" runat="server" /> 
       <asp:Image ID="imgicon" runat="server" Height="10px" Style="display: none;" ImageUrl="~/images/arrow_left.jpg" /> 
      </ItemTemplate> 
      <ItemStyle Width="35px" /> 
     </asp:TemplateField> 

現在處理在服務器端代碼ItemDataBound事件

Protected Sub SPGridView_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvBanner.RowDataBound 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim chkselect As CheckBox = e.Row.FindControl("chkselect") 
     Dim imgicon As Image = e.Row.FindControl("imgicon") 
     If chkselect IsNot Nothing Then 
      chkselect.Attributes.Add("onclick", "javascript:DoMyTask(this,'" + imgicon.ClientID + "')") 
     End If 
    End If 
End Sub 

現在指定的JavaScript函數在aspx頁面如下變化。

<script type="text/javascript" language="javascript"> 
    function DoMyTask(obj, imgid) {    
     var objCheck = obj.checked; 
     var objimg = document.getElementById(imgid) 
     if (objCheck == true) { 
      objimg.style.display = "block"; 
      //set more attributes over here 
     } 
     else { 
      objimg.style.display = "none"; 
      //set more attributes over here 
     } 
     var count = $(":checkbox:checked").length; 
     alert('you have selected ' + count + ' Rows'); 
    } 

</script> 

希望這將幫助你...編碼快樂..

+0

非常感謝:)但我如何計算選定的行? – 2012-04-07 07:13:36

+0

選中的行表示具有複選框的行是否被選中?你需要對那些有刻度標記的行進行計數。 – 2012-04-07 07:18:28

+0

是的,我想要計算選中的行,併爲頁面上的鏈接控件添加屬性並啓用它。 – 2012-04-07 07:24:48

1

您必須在複選框中設置autopostback =「false」或刪除autopostback屬性。 autopostback實時刷新頁面。

+0

我想在添加更改時添加特殊代碼。 – 2012-04-07 05:58:20

+0

你能指定你想在複選框更改事件中做什麼嗎?是否有可能使用客戶端事件完成您的任務? – 2012-04-07 06:02:15

+0

我想爲控件添加一個屬性。如果選擇的行是一個,則可以看到一個控件。 – 2012-04-07 06:06:02

1

那麼如果將複選框的autopostback屬性設置爲false會發生什麼?

另外,如果您實際上正在處理複選框的onchange事件,則可以使用UpdatePanel包裝網格;用戶不會看到回發,但您仍然可以獲得服務器端事件處理的靈活性。所有的

+0

網格沒有autopostback屬性。 – 2012-04-07 06:14:15

+0

對不起,我的意思是複選框 – 2012-04-07 06:19:58

+0

不,我應該在檢查更改時添加特殊代碼。 – 2012-04-07 06:22:03