Nascondere il pulsante immagine nella riga di modifica in GridView in C#

Aug 21 2020

Ho un GridViewin C # che mostra i record delle persone

Per una singola persona posso avere un solo codice o più codici associati.

Una volta riconosciuta la persona, List<string>viene creata una con i suoi codici:

List<string> codList = new List<string>();
string ns;

if (reader.HasRows)
{
    while (reader.Read())
    {
        cod = reader["cod"].ToString();
        codList.Add(cod.ToString());
        aut = Convert.ToInt32(reader["Aut"]);
    }

    ns = "";
    ns = string.Join(",", (from cod in codList select "?").ToList());
}

Per questa persona l'elenco dei codici contiene questi valori:

32D
32B
33E
33G
35H

Ora ho bisogno di nascondere il pulsante immagine per la riga di modifica in GridView, se il valore della variabile autè maggiore di zero e se il valore della codcolonna corrisponde ai valori in list:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    string cod = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "cod"));
    ImageButton btnEdit = (ImageButton)e.Row.FindControl("imgbtnEdit");

    foreach (var co in codList)
    {
        if (aut > 0 && cod.ToString().Contains(co.ToString()))
        {
            btnEdit.Visible = true;
        }
        else
        {
            btnEdit.Visible = true;
        }
    }
}

Ma il pulsante per modificare la riga in GridViewè visibile solo per l'ultimo valore dilist

35H

Invece per gli altri valori del listpulsante di modifica riga in GridViewè nascosto.

32D
32B
33E
33G

Qual è il modo migliore per farlo?

Risposte

PalleDue Aug 21 2020 at 18:06

Non sono sicuro di aver compreso appieno il tuo problema, ma vedo un problema:

if (aut > 0 && cod.ToString().Contains(co.ToString()))
{
    btnEdit.Visible = true;
}
else
{
    btnEdit.Visible = true;
}

Ciò restituisce btnEdit.Visible = true, indipendentemente dalla tua condizione. Penso che tu intendessi:

btnEdit.Visible = (aut > 0 && cod.ToString().Contains(co.ToString());

Anche valutarlo in un ciclo for fa poca differenza in quanto è lo stesso btnEdit che imposti ogni volta. Questo probabilmente spiega perché è l'ultimo valore che si attacca.