Флажок в ASP-GridView с FindControl НИКОГДА не отмечен - PullRequest
0 голосов
/ 08 июня 2018

У меня в ASPX-WebForm в Classic ASP есть GridView с информацией о клиентах для CSV-Export.

В этом GridView у меня в TemplateField есть флажок для выбора пользователем.В CodeBehind на ClickEvent я иду с ForEach-Loop по строкам GridView и хочу установить флажок самогенерируемого (данные поступают не из базы данных), если установлен.С FindCOntrol я распаковываю флажок, и там все в порядке.Но каждый флажок НЕ отмечен, хотя он проверен в веб-форме.

Может кто-нибудь сказать мне, что я делаю неправильно?

ASPX:

<body>
<form id="form1" runat="server">
<div>

    <asp:GridView ID="GridViewAdressen" runat="server" AutoGenerateColumns="false" DataKeyNames="order_id" EnablePersistedSelection="true" style="width:100%;" PagerSettings-Mode="Numeric">
        <Columns>
            <asp:TemplateField HeaderText="Auswahl">
                <ItemTemplate>
                    <input type="checkbox" name="chkSelect" runat="server"/>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:BoundField HeaderText="ID" DataField="order_id"/>
            <asp:BoundField HeaderText="Zeit" DataField="zeitpunkt"/>
            <asp:BoundField HeaderText="Preis" DataField="preis"/>
            <asp:BoundField HeaderText="Name" DataField="name"/>
            <asp:BoundField HeaderText="Nick" DataField="username"/>

        </Columns>
    </asp:GridView>

    <asp:Button Text="CSV erstellen" runat="server" OnClick="Unnamed_Click"/>

</div>
</form>

CodeBehind:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString["security"] != null && Request.QueryString["security"] == token.seitenSicherheit)
    {
        // Anzahl Adressen
        string menge = "10";
        if (Request.QueryString["menge"] != null)
        {
            menge = Request.QueryString["menge"];
        }

        DataTable table = new DataTable();
        using (OdbcConnection connection = new OdbcConnection(ConfigurationManager.ConnectionStrings["MySQLConnStr"].ConnectionString))
        {
            connection.Open();
            using (OdbcCommand command = new OdbcCommand("SELECT * FROM bestellvorgang order by zeitpunkt desc limit " + menge, connection))
            {
                using (OdbcDataAdapter ad = new OdbcDataAdapter(command))
                {
                    ad.Fill(table);
                }
            }
        }
        GridViewAdressen.DataSource = table;
        GridViewAdressen.DataBind();
    }
    else
    {
        Response.Write("Keine Zugangsberechtigung");
    }
}

protected void Unnamed_Click(object sender, EventArgs e)
{
    // string für csv erstellen

    // Grid View durchlaufen und checkBox prüfen
    foreach (GridViewRow row in GridViewAdressen.Rows)
    {
        HtmlGenericControl chk = (HtmlGenericControl)row.FindControl("chkSelect");


        if (chk.Checked)
        {
            // Abfrage für den order_id
            Response.Write("Order-ID: " + GridViewAdressen.DataKeys[row.RowIndex].Value);

        }

    }
}

UNBOXING С FINDCONTROL НЕ НУЛЬ, но НИКОГДА НЕ ПРОВЕРЕНО !!!!!!!

В качестве альтернативы, я попытался использовать Html-флажок ввода, но этовсегда NULL при использовании FindControl и unbox как HtmlGenericControl ....

1 Ответ

0 голосов
/ 08 июня 2018

Вы должны обернуть DataBinding GridView внутри проверки IsPostBack

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString["security"] != null && Request.QueryString["security"] == token.seitenSicherheit)
    {
        if (IsPostBack == false)
        {
            //rest of your code

            GridViewAdressen.DataSource = table;
            GridViewAdressen.DataBind();
        }
    }
    else
    {
        Response.Write("Keine Zugangsberechtigung");
    }
}

Если вы этого не сделаете, данные будут отсканированы на каждом PostBack, и это внесет любые изменения (например, проверка CheckBox), сбросив вих значения по умолчанию.

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