2012-04-07 109 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