1

いくつかのカスタムテンプレートを含むグリッドビューがあります。

 <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);
                    }
                }
            }
        }

デバッガーを使用し、すべてのグループでadminのチェックを外しても、cbAdmin.Checkedを見ると、それはまだtrueであり、最初と同じ値であるため、何も起こりません。

何が問題なのですか?ボタンのポストバックに更新された値が表示されないのはなぜですか?

ありがとう

4

2 に答える 2

1

GridView#DataBind()あなたは内に電話する必要がありますif(!IsPostBack){ }

また、テキストボックスのAutoPostBackプロパティを「true」に設定する必要があります

于 2013-02-04T20:59:02.593 に答える
0

GridViewポストバックでデータバインディングしていると思います。これにより、データベースからデータが再度読み込まれ、変更が防止されます。したがって、 :のPostBackプロパティを使用します。Page

protected void Page_Load(Object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        DataBindGridView();
    }
}
于 2013-02-04T21:02:56.160 に答える