Изменения, сделанные в gridview, не отображаются в коде позади

У меня есть gridview в моем aspx, который привязан к данным из базы данных. Есть флажок. Когда я меняю проверенный статус со стороны клиента, изменения не отображаются в коде позади. Есть идеи, почему это происходит?

<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 имеет данные из базы данных.

1
0
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете написать свой код, чтобы найти значение флажка при нажатии кнопки, как показано ниже.

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.
            }

        }

    }

Проблема в том, что изменения, внесенные в представление, не отображаются в исходном коде. Показывает только предыдущее значение.

Hemal Kithulagoda 26.10.2018 07:55

Он отражает новое значение и проверяется в локальной системе с тестовыми данными.

Suraj Kumar 26.10.2018 07:59
Ответ принят как подходящий

Вы должны связать свои данные GridView внутри проверки PostBack. В противном случае отмеченное состояние будет перезаписано данными, привязанными к GridView, и вы потеряете все изменения, сделанные пользователем.

protected void Page_Load(object sender, EventArgs e)
{
    //not here
    GridViewUserList.DataSource = source;
    GridViewUserList.DataBind();

    if (IsPostBack == false)
    {
        //but bind data here...
        GridViewUserList.DataSource = source;
        GridViewUserList.DataBind();
    }
}

Другие вопросы по теме