Флажок на GridView всегда возвращает False - PullRequest
1 голос
/ 22 января 2012

У меня есть GridView с флажком в первом столбце:

<asp:GridView ID="dgNumeradores" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="ItemID">
    <Columns>
        <asp:TemplateField HeaderText="Seleccionar">
            <ItemTemplate>
                <asp:CheckBox runat="server" ID="chkChecked" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Item" DataField="Description">
        </asp:BoundField>
        <asp:BoundField HeaderText="Plantilla" DataField="Template">
        </asp:BoundField>
    </Columns>
</asp:GridView>

Теперь в приведенном ниже коде я пытаюсь обновить столбец Проверено в DataTable, выступающем в качестве источника данныхдля GridView (поскольку, как вы можете видеть выше, столбец Checkbox не связан с источником данных по причинам, которые вы, вероятно, знаете.):

Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    Try
        For Each dr As GridViewRow In Me.dgNumeradores.Rows
            Me.itemsNumTable.Select("ItemID = '" & dgNumeradores.DataKeys(dr.RowIndex).Value & "'")(0)("Checked") = DirectCast(dr.Cells(0).FindControl("chkChecked"), CheckBox).Checked
        Next
        'Some more unimportant-for-this-question code
    Catch ex As Exception
        tableInfo.ShowError(ex.Message)
    End Try
End Sub

Дело в том, что Checkbox.Checked всегда возвращает False.

Как получить проверенное состояние флажков в этом сценарии?Или как лучше всего обновить упомянутый выше столбец?

PS Обратите внимание, что нажатие на флажки не публикуется.На странице ничего не происходит до тех пор, пока пользователь не нажмет Save (и это является предполагаемым поведением).

Ответы [ 4 ]

8 голосов
/ 22 января 2012

Связываете ли вы GridView в Page Load?Если это так, используйте IsPostBack

IF Not IsPostBack Then
   DataBind()
End IF
2 голосов
/ 23 января 2012

Если для свойства AutoPostback не установлено значение true?

<asp:CheckBox runat="server" ID="chkChecked" AutoPostback="true" />
0 голосов
/ 11 марта 2016

У меня есть два столбца в моем GridView.Первый столбец содержит имена файлов, второй столбец содержит флажки.После того как пользователь выбрал произвольное количество флажков, нажмите кнопку, чтобы загрузить выбранные файлы.

Моя разметка выглядит следующим образом

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
            <asp:BoundField HeaderText="Available Schemas" 
                DataField="SchemaFileName" 
                SortExpression="UserId">
            </asp:BoundField>
            <asp:TemplateField HeaderText="Select Schema">
                <ItemTemplate>
                    <asp:CheckBox runat="server" ID="SelectedFiles"  checked= '<%# Eval("checkValue") %>'/>
                </ItemTemplate>
            </asp:TemplateField>
    </Columns>
</asp:GridView>

Моя часть CodeBehind выглядит следующим образом

protected void Page_Load(object sender, EventArgs e)
{
    GenerateDownloadLinks();

    if (!IsPostBack)
    { 
    GridView1.DataSource = listOfData;
    GridView1.DataBind();
    }
}

listOfData заполняется в GenerateDownloadLinks (), а затем связывается с GridView1.

После того, как пользователь выбрал файлы и нажал кнопку «Загрузить», мой код просматривает строки в GridView и когда CheckBoxпроверяется, обновляет изначально ложное значение записи данных, чтобы убедиться, какие файлы должны быть доступны для загрузки.

protected void GetFiles_Click(object sender, EventArgs e)
{
    int i = 0;
    foreach (GridViewRow row in GridView1.Rows)
    {
        CheckBox chkRow = (row.Cells[1].FindControl("SelectedFiles") as CheckBox);
        if (chkRow.Checked)
        {
            listOfData[i].CheckValue = true;
        }
        i++;
    }
}
0 голосов
/ 10 июля 2015

Gridview отлично заполняет, даже если он не связан в блоке Page.IsPostBack, но здесь флажок всегда будет возвращать false.

Привязка gridview в Page.IsPostBack, и он будет работать отлично.

Используйте код ниже Если не IsPostBack Тогда DataBind () Конец IF

А затем Checkbox.Checked вернет true.

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