Код позади не принимает изменения, сделанные в Checkbox в Gridview при обратной передаче - PullRequest
2 голосов
/ 13 января 2012

У меня есть gridview, в котором поле шаблона содержит флажок в качестве одного из полей

<asp:TemplateField HeaderText="Confirm Driver Details" FooterText="Confirm Driver Details">
    <ItemTemplate>
        <asp:CheckBox ID="chkConfirmDetails" runat="server" MaxLength="100" Width="50px" Enabled="false" Checked="true"></asp:CheckBox>
    </ItemTemplate>
</asp:TemplateField>

Первоначально это проверено и не включено.

Пользователь загружает файл, который загружается в объект и затем привязывается к сетке. Для события RowDataBound выполняется некоторая проверка данных. В некоторых случаях, если некоторые проверки не пройдены, я хочу установить флажок и снять его.

CheckBox chkConfirmDetails = (CheckBox)e.Row.Cells[e.Row.Cells.Count - 2].FindControl("chkConfirmDetails");

//If this is enabled then we just need to check whether it is ticked or not
if (!chkConfirmDetails.Enabled)
{
    if (!ValidateDriver(_uploadData.DriverData[e.Row.DataItemIndex], out driverValidationMessage))
    {
        Label label = new Label();
        label.Text = "Details of this Driver cannot be found<br />Please double-check to see if the Driver Number, Date of Birth and PPSN are entered correctly<br />If you are sure you have the correct details entered tick this box to confirm";
        e.Row.Cells[e.Row.Cells.Count - 2].Controls.Add(label);
        e.Row.Cells[e.Row.Cells.Count - 2].BackColor = System.Drawing.Color.Yellow;
        ((TableRow)e.Row.Cells[e.Row.Cells.Count - 2].Parent).BackColor = System.Drawing.Color.Red;
        chkConfirmDetails.Enabled = true;
        chkConfirmDetails.Checked = false;
        _numberOfInvalidCells++;
    }
}

Это все работает нормально, флажок становится активным и не отмечен.

Затем пользователь может установить флажок, чтобы подтвердить, что данные верны, и повторно подтвердить строку. В каждой строке сетки данных есть кнопка, которую пользователь может нажать, чтобы выполнить эту функцию. Поэтому, когда пользователь нажимает кнопку подтверждения строки, вышеупомянутый код вызывается снова. На этот раз флажок включен и может быть или не может быть отмечен в зависимости от того, что сделал пользователь.

Однако, когда я получаю ссылку на флажок с помощью метода FindControl, он все равно отображается как Не включено и не отмечено (даже если оно включено и не отмечено в форме)

Может кто-нибудь объяснить, почему это происходит, и способ получить фактическое состояние флажка?

EDIT

Глядя на данные Request.Form.AllKeys, в нем есть ключи для большинства других элементов шаблона в виде сетки (текстовые поля и dropDownLists), но нет флажка или кнопки подтверждения

1 Ответ

2 голосов
/ 13 января 2012

RowDataBound вызывается только в том случае, если вы связываете GridView с его источником данных. Это означает, что вы звонили раньше. Но в результате все изменения, сделанные пользователем, отменяются.

Итак, вопрос в том, зачем вам нужно было звонить GridView.DataBind() для повторной проверки? Вы не можете сделать это в методе, который повторяет все GridViewRows?

Кстати, есть ли конкретная причина, по которой вы использовали

(CheckBox)e.Row.Cells[e.Row.Cells.Count - 2].FindControl("chkConfirmDetails")

вместо простого

(CheckBox)e.Row.FindControl("chkConfirmDetails")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...