在gridview中所做的更改不会显示在后面的代码中

时间:2018-10-26 05:08:10

标签: asp.net gridview webforms

我的aspx中有一个gridview,它绑定到数据库中的数据。它有一个复选框。当我从客户端更改检查状态时,更改不会显示在后面的代码中。知道为什么会这样吗?

<asp:Button OnClick="Btn_Click" CommandArgument="<%# GridViewUserList %>" runat="server" Text="Save" />
    <asp:GridView runat="server" ID="GridViewUserList" AutoGenerateColumns="false" ShowFooter="false" ShowHeader="true" Width="100%">
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:Label ID="isSelectHeader" runat="server" Text="Assign" />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:CheckBox ID="isAssigned" runat="server" Checked='<%#DataBinder.Eval(Container.DataItem, "IsAssigned") %>'/>
            </ItemTemplate>
            <ItemStyle Width="5%" HorizontalAlign="Center" VerticalAlign="top" />
            <FooterStyle Width="5%" HorizontalAlign="Center" VerticalAlign="top" />
            <HeaderStyle HorizontalAlign="Center" />
        </asp:TemplateField>
        <asp:BoundField DataField="Salutation" HeaderText="User"/>
    </Columns>
</asp:GridView>

这是我后面的代码。

protected void Btn_Click(object sender, EventArgs e)
{
    for (int i = 0; i < userLicenseList.Count; i++)
    {
        var isAssigned = GridViewUserList.Rows[i].FindControl("isAssigned") as CheckBox;
        if (isAssigned.Checked != userLicenseList.ElementAt(i).IsAssigned)
        {
            //some code
        }
    }
}

isAssigned.Checked具有上一个值,而不是更改后的值。

userLicenseList具有数据库中的数据。

2 个答案:

答案 0 :(得分:2)

您必须将GridView数据绑定到IsPostBack检查中。否则,选中状态将被绑定到GridView的数据覆盖,并且您将丢失用户所做的所有更改。

si

答案 1 :(得分:0)

您可以编写代码来在单击按钮时查找复选框的值,如下所示。

protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow gvr in GridView1.Rows)
        {

            if (((CheckBox)gvr.FindControl("isAssigned")).Checked == true)

            {
                //Your logic here .
            }
            else
            {
                //Your logic here.
            }

        }

    }