Значение флажка всегда пусто, даже если я его проверяю - PullRequest
1 голос
/ 31 мая 2019

Я сделал кнопку, чтобы удалить файлы из базы данных, чтобы удалить файл, нужно поставить галочку и затем нажать кнопку.почему, когда я нажимаю кнопку и записываю значение флажка в html, он всегда говорит ложь ...

ASPX:

<asp:GridView HorizontalAlign="Center" ID="GridView1" runat="server" class="" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Horizontal" DataKeyNames="ID">
    <Columns>
        <asp:TemplateField HeaderText="Name">< ItemTemplate >
                            < asp:LinkButton ID = "LinkButton2" runat="server" OnClick="OpenDocument" Text='<%# Eval("File_Name") %>'></asp:LinkButton>
                        </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Delete?">< ItemTemplate >
                            < asp:CheckBox ID = "CheckBox1" runat="server" />
                        </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:Button runat="server" Text="Update" ID="Update" class="button" OnClick="UpdateTable" Style="font-size: 20px" />

Код сзади:

protected void UpdateTable(object sender, EventArgs e)
{
    foreach (GridViewRow item in GridView1.Rows)
    {
        CheckBox chk = (CheckBox)item.FindControl("CheckBox1");
        if (chk != null)
        {
            //This is being written and always false
            Response.Write(chk.Checked);
            if (chk.Checked)
            {
               //Delete the item. (never being executed)
            }
        }
    }
}

Я ожидал, что chk.Checked будет True, так как я щелкнул по нему ...

Ответы [ 2 ]

3 голосов
/ 31 мая 2019

Если вы связываете свою сетку в Page_Load, убедитесь, что вы не связываете свою сетку за пределами if (! IsPostBack) {}. В противном случае вы потеряете флажки на каждом постбэке и потеряете статус флажков.

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
       //Bind Your Grid Here
    }
}
1 голос
/ 31 мая 2019

item.Cells [0]. Текст не будет работать, поскольку столбец сетки определен как TemplateField, а не как BoundField.Поэтому нам нужно получить доступ к элементу управления с помощью FindControl и извлечь из него текст.

protected void UpdateTable(object sender, EventArgs e)
        {
            foreach (GridViewRow item in GridView1.Rows)
            {
                CheckBox chk = (CheckBox)item.FindControl("CheckBox1");
                if (chk != null)
                {
                    //This is being written and always false
                    Response.Write(chk.Checked);
                    if (chk.Checked)
                    {
                        //Delete the item. (never being executed)
                    }
                }
                LinkButton lnk = (LinkButton)item.FindControl("LinkButton2");
                if (lnk != null)
                {
                    Response.Write(lnk.Text);
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...