none
GridView campo vuoto

    Domanda

  • Buonasera a tutti,

    ho un problema con gridview, eseguo l'upload di un documento sul db sql, quando vado a vedere la gridview con i dati ed il link e il file caricato se clicco sul linkbutton della gridview per eseguire il download tutto funziona regolarmente, il mio problema è che se il linkbutton non ha file associato vorrei che nel campo uscisse scritto esempio (no file o addiritura una gif con una x) altrimenti il link rimane attivo e poi mi rimanda a ad una risorsa non trovata.

    Potete darmi una mano per risolver questo problema.

    Grazie a tutti.

    Luigi.

     

    lunedì 24 febbraio 2014 18:04

Risposte

  • Potresti crearti un itemtemplate che contiene il linkbutton ed eventualmente l'immagine e gestire nel rowdatabound la presenza del file eventualmente nascondendo il linkbutton e facendo visualizzare l'immagine desiderata.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.

    • Contrassegnato come risposta glider77 mercoledì 26 febbraio 2014 00:53
    lunedì 24 febbraio 2014 20:29
    Moderatore

Tutte le risposte

  • Potresti crearti un itemtemplate che contiene il linkbutton ed eventualmente l'immagine e gestire nel rowdatabound la presenza del file eventualmente nascondendo il linkbutton e facendo visualizzare l'immagine desiderata.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.

    • Contrassegnato come risposta glider77 mercoledì 26 febbraio 2014 00:53
    lunedì 24 febbraio 2014 20:29
    Moderatore
  • Ciao Luca, ho provato ad impostare come mi hai detto ma mi sa che stò sbagliando parecchio ricavando l'indice e l'id, ti mostro il mio itemtemplate della grid.

    <ItemTemplate>
         <asp:LinkButton ID="lnkDownload" runat="server" OnClick="DownloadFile" CommandArgument='<%# Eval("IDPRAT")%>' Visible="false"><asp:Image ImageUrl="~/css/images/Download.jpg" runat="server" /></asp:LinkButton>
         <asp:Image ID="imgOut" runat="server" ImageUrl="~/css/images/no.png" Visible="false" />
    </ItemTemplate>


    Sotto il databound:

    Protected Sub Bound_Link(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
            Dim lnk As LinkButton = DirectCast(GridView1.FindControl("lnkDownload"), LinkButton)
            Dim img As Image = DirectCast(GridView1.FindControl("imgOut"), Image)
            Dim index As Integer = lnk.CommandArgument
            If GridView1.Rows(index).Cells(7).Text = "" Then
                lnk.Visible = False
                img.Visible = True
            Else
                lnk.Visible = True
                img.Visible = False
            End If
    End Sub

    Penso che sbaglio a ricavare l'index.

    Luigi.

    martedì 25 febbraio 2014 13:20
  • potresti fare così per testare se lid dell'immagine esiste:

    int number;
    bool result = Int32.TryParse(lnk.CommandArgument, out number);
    if (number>0){
    //ID Immagine presente
    }else{
    //ID Immagine non presente
    }
    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.


    martedì 25 febbraio 2014 15:02
    Moderatore
  • Ho provato ad impostarlo ma ritorna un errore

    "Riferimento a un oggetto non impostato su un'istanza di oggetto"

    Questa la riga incriminata

    Dim result As Boolean = Int32.TryParse(lnk.CommandArgument, number)

    Comunque il mio problema è come ricavare se il download del documento esiste sul db sql oppure no,

    cioè se esiste il download uploadato allora mostra immagine download se no mostrami immagine x.

    Mi stò incasinando.

    martedì 25 febbraio 2014 15:38
  • Nel rowdatabound dovresti provare così:

    If e.Row.RowType = DataControlRowType.DataRow Then
    	Dim lnk As LinkButton = TryCast(e.Row.FindControl("lnkDownload"), LinkButton)
    End If

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.

    martedì 25 febbraio 2014 15:49
    Moderatore
  • Ciao Luca, ci stò sbattendo la testa, la condizione non mi funziona , praticamente mi fa uscire 2 x rosse cioè come se non ci fosse nessun documento invece c'è.

    Ho notato, che se imposto la if number > 0 in questo modo non ottengo quello che voglio, visto che commandArgument del linkbutton è riferito all'id Della pratica a cui è associato, quindi non potrà mai essere diverso l'id pratica è sempre quello una volta inserita nel db.

    Dovrei riuscire  a trovare una soluzione che mi identifichi la presenza del file nella tabella upload in join alla tabella pratiche, premetto che il file lo salvo sul db e non in una path.

    Grazie ancora.

    Luigi.

    martedì 25 febbraio 2014 16:56
  • Ciao a tutti, sono riuscito a risolvere il problema.

    Oltre e grazie al preziosissimo aiuto fondamentale di Luca nel rowdatabound per gestire il campo ela condizione ho inserito una colonna nella tabella upload chiamata "chk" tipo campo "int" dandogli un valore di associazione di default lato sql = a "0".

    Così facendo ho aggiunto nella itemtemplate della gridview una label contenente  il valore 0 o 1 che recupero dal modulo d'inserimento upload nel db tramite una checkbox impostata con valore di default a 1 e quindi nel rowdatabound posso gestire la mia condizione e infine eseguendogli il binding dalla sqldatasource del gridview.

    Sempre nel rowdatabound ho dovuto fare il cast della label ma ricavando anche il numero della cella della riga del gridview.

    Nella condizione a questo punto ho potuto giocare con le immagini a mio piacimento addirittura ho inserito nella condizione il caso in cui il documento non esistesse di far sparire anche i pulsanti di modifica ed eliminazione del file.

    Posto il mio codice in modo tale che potrà magari essere utile per altri utenti del forum.

    Gridview:

     
    <asp:TemplateField HeaderText="Documento" ItemStyle-HorizontalAlign="Center" ConvertEmptyStringToNull="true">
                    <ItemTemplate>
                        <asp:Label ID="lblCheck" runat="server" Text='<%# Eval("chk")%>' Visible="false"></asp:Label>
                        <asp:LinkButton ID="lnkDownload" runat="server" Visible="false" OnClick="DownloadFile" CommandArgument='<%# Eval("idprat")%>' onmouseover="writetxt('Download Documento')" onmouseout="writetxt(0)"><asp:Image ID="imgOk" ImageUrl="~/css/images/Download.jpg" runat="server" /></asp:LinkButton>
                        <asp:Image ID="imgOut" Visible="false" runat="server" ImageUrl="~/css/images/no.png" onmouseover="writetxt('Non esistono documenti associati a questa pratica.')" onmouseout="writetxt(0)" />
                    </ItemTemplate>
                </asp:TemplateField>

    Codebehind:

    Protected Sub Bound_Link(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim check As Label = CType(e.Row.Cells(8).FindControl("lblCheck"), Label)
                Dim lnk As LinkButton = TryCast(e.Row.FindControl("lnkDownload"), LinkButton)
                Dim imgOut As Image = TryCast(e.Row.FindControl("imgOut"), Image)
                Dim imgMod As Image = TryCast(e.Row.FindControl("imgMod"), Image)
                Dim imgDel As Image = TryCast(e.Row.FindControl("imgDel"), Image)
                If (check.Text = "1") Then
                    lnk.Visible = True
                    imgMod.Visible = True
                    imgDel.Visible = True
                Else
                    imgOut.Visible = True
                    imgMod.Visible = False
                    imgDel.Visible = False
                End If
            End If
        End Sub

    Grazie e ciao.

    mercoledì 26 febbraio 2014 00:52
  • Grazie, glider77, per aver condiviso la tua soluzione finale con la community.

    <QUESTO CONTENUTO È DISTRIBUITO "AS IS", ESCLUDENDO OGNI FORMA DI RESPONSABILITÀ DI QUALUNQUE GENERE, ESPLICITA O IMPLICITA>

    Grazie
    Il Supporto delle Comunità MSDN

    Vi preghiamo di ricordare a “Segnare come Risposta” i post che risolvono il vostro problema. Questa è di solito una modalità di riconoscimento verso chi vi ha aiutati, facilitando per il futuro la scoperta della risoluzione per gli altri visitatori.

    venerdì 28 febbraio 2014 14:11
    Proprietario