2013-02-04 53 views
1

我有一些自定义模板一个GridView:GridView不更新回发值?

<asp:GridView ID="gvGroups" runat="server" AutoGenerateColumns="False" 
    CssClass="table table-hover table-striped" GridLines="None" > 
     <Columns> 
      <asp:BoundField DataField="GroupDescription" HeaderText="Name" ReadOnly="True" 
       SortExpression="GroupDescription" /> 
      <asp:TemplateField HeaderText="Administrator"> 
       <ItemTemplate> 
        <asp:CheckBox ID="cbAdmin" runat="server" 
        Checked='<%# Boolean.Parse((Boolean)Eval("IsReadOnly") ? "True" : "False") ? false : true %>'/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Remove"> 
       <ItemTemplate> 
        <asp:CheckBox ID="cbRemove" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="ID" SortExpression="GroupID" Visible="False"> 
       <ItemTemplate> 
        <asp:Label ID="lblID" runat="server" Text='<%# Bind("GroupID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

然后我有一个按钮,我点击,并且应该改变分组管理和删除检查组。

这里是按钮的代码:

protected void btnSave_Click(object sender, EventArgs e) 
     { 
      foreach (GridViewRow gvr in gvGroups.Rows) 
      { 
       CheckBox cbAdmin = (CheckBox)gvr.FindControl("cbAdmin"); 
       CheckBox cbRemove = (CheckBox)gvr.FindControl("cbRemove"); 
       Label lblID = (Label)gvr.FindControl("lblID"); 
       int id; 
       bool idValid = int.TryParse(lblID.Text,out id); 
       bool isReadOnly = !cbAdmin.Checked; 


       if (idValid) 
       { 
        Group g = SecurityManager.GetGroup(id); 

        if (g.IsReadOnly != isReadOnly) 
        { 
         bool updateSuccess = SecurityManager.ChangeGroupPermissions(id, isReadOnly); 
        } 

        if (cbRemove.Checked) 
        { 
         bool removeEmpSuccess = SecurityManager.RemoveEmployeesFromGroup(id); 
         bool removeSuccess = SecurityManager.RemoveGroup(id); 
        } 
       } 
      } 
     } 

我使用的调试器,甚至当我取消对所有组管理员,当我看着cbAdmin.Checked,它仍然是真实的,这是相同的值,它从开始,因此没有任何事情发生。

可能是什么问题?为什么我没有看到按钮回发中的更新值?

感谢

+0

http://stackoverflow.com/questions/8936633/checkbox-checked-state-inside-gridview – Joe

回答

1

你必须内if(!IsPostBack){ }

还需要设置文本框为“true”

+0

现在这个工作,但我不得不删除项目后刷新看到变化。 – jmasterx

+0

多种方式,我的最爱:location.href ='yourpage.aspx' –

+0

我不知道我的理解。 – jmasterx

0

我猜你是数据绑定在回发GridView的AutoPostBack属性调用GridView#DataBind()。这将再次从数据库加载数据并防止更改。所以UE的PagePostBack属性:

protected void Page_Load(Object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     DataBindGridView(); 
    } 
}