2012-11-06 7 views
6

Una tabella nel mio database contiene immagini, documenti, drizze di dll e così via. Come posso implementare la mappatura di tutto questo per un utente? Lego questi dati a una tabella dati e voglio avere collegamenti ipertestuali in ogni cella, che quando cliccato invoca/apre la voce corrispondente dal database.Come visualizzare oggetti diversi in griglia?

OracleCommand oracleCom = new OracleCommand(); 
oracleCom.Connection = oraConnect; 
oracleCom.CommandText = "Select * From " + Session["tableNameIns"]; 
OracleDataAdapter adapter = new Oraenter code herecleDataAdapter(); 
DataTable tableD = new DataTable(); 
tableD.Locale = System.Globalization.CultureInfo.InvariantCulture; 
adapter.SelectCommand = oracleCom; 
adapter.Fill(tableD); 
changeTableAtributs(tableD); 
tableResults.DataSource = tableD.AsDataView(); 
tableResults.DataBind(); 

in dB prossimi atributes: I_ID (numero), i_objecttype_id (numero), s_code (nvarchar), S_Name (nvarchar), m_content (blob), m_description (nvarchar) dbview

On cliente I vedi successivo: i_id (numero), i_objecttype_id (numero), s_code (nvarchar), s_name (nvarchar), m_description (nvarchar). Senza attributo m_content. clienview

+6

Spiega il tuo scenario in breve in modo che tutti possano capire la tua domanda. E se possibile, spiega con un semplice esempio. Più informazioni fornite, migliore è la soluzione. –

+0

Spiega di più con l'esempio .. –

+1

Che ne dici di usare un'interfaccia e BindingSource? – Tobias

risposta

1

Sembra che la tua domanda sia "incompleta". Quindi se il blob è un'immagine, vuoi che l'immagine sia visualizzata? Cosa dovrebbe succedere se il blob è una dll?

Nel database il campo M_CONTENT è un blob, quindi se si esegue il databind ad un GridView il GridView non ha modo di sapere cosa c'è in quel campo.

Se si desidera visualizzare un'immagine per mostrare il tipo di file nel BLOB, è necessario conoscere il tipo. O si memorizza il tipo nel database (Ottimale) o si analizza il BLOB in fase di esecuzione e si individua il tipo di file.

Mi sembra che tu abbia già il tipo (I_OBJECTTYPE_ID). Se questo è il caso, allora si può definire una colonna sotto asp: GridView/colonne

<asp:TemplateField HeaderText="File type"> 
    <ItemTemplate> 
     <asp:Image runat="server" ID="mediaImage" 
      ImageUrl='<%# GetImageUrl(Eval("type") as string) %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 

Nel tuo caso la colonna tipo è chiamato I_OBJECTTYPE_ID. Il GetImageUrl è una funzione nel codebehind:

switch (type) 
{ 
    case "video": 
     return "~//Images//video.png"; 
    case "audio": 
     return "~//Images//audio.png"; 
} 
return ""; // Something is wrong 

E con questa tecnica è possibile effettuare collegamenti ipertestuali e altre cose sotto il markup ItemTemplate.

0

È possibile ottenere questi valori in caso RowDataBound del GridView e creare i collegamenti/collegamenti ipertestuali e assegnarli alle righe

protected void tableResults_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataRowView row = e.Row.DataItem as DataRowView; 

      if (row != null) 
      { 
       Label lbImagePath = e.Row.FindControl("lbImagePath") as Label; 
       lbImagePath.Text = row["ImagePathColumn"].ToString(); 
      } 
     } 
    } 

Nel tuo caso cambiamento che l'etichetta a un controllo HyperLink e imposta è URL al valore della colonna

+0

Intendevo mostrare diversi oggetti. Non collegamenti –

+0

Cosa intendi per oggetti diversi? – Sev

+1

Sì, nella tua domanda iniziale dici che vuoi avere collegamenti ipertestuali in ogni cella. – lintmouse

0

Se si vuole permettere all'utente di scaricare il file invece di mostrare (perché dll può essere visualizzata sulla browser) allora fare come segue:

  1. creare una nuova pagina di dire downloadfile.aspx;
  2. In datarowbound, l'evento analizza i valori necessari per scaricare il file come tipo file, nome file, ecc; di aver salvato abc.pdf come BLOB, quindi l'URL del collegamento ipertestuale deve essere downloadfile.aspx?fname=abc.pdf&type=application&pkey=uniqueidentification;
  3. In evento di carico downloadfile.aspx ottenere il blob come byte[] basato su uniqueidentification (la chiave primaria). Convertirlo in streaming e dare in risposta come in this question.
0

Per compiuto questo, è necessario utilizzare TemplateField. Inserirai i controlli in ogni cella e assocerai i dati utilizzando la funzione Eval. Per ulteriori informazioni, si prega di fare riferimento a questo link

0

fare il pulsante di griglia per ogni riga e utilizzare selezionare o eliminare o aggiornare pulsante.

e.selectedindex.

Si può sempre modificare l'intestazione o nascondere l'intestazione.

u può anche utilizzare gli eventi come SelectedIndexChanged, quindi una volta u selezionato u ottenere l'ID indice selezionato in modo da utilizzare che può richiamare il metodo

0

Fate così, in TemplateField avete EditTemplateField e ItemTemplateField, in ItemTemplateField metti i nomi delle tue colonne Ex: Age: e nel Text Bind ("Age") e in ItemTemplate copia everythinh da EditTemplate e lo incolli loro, non copi esattamente il mio codice questo è un esempio, ho reso il mio codice visualizzato in una tabella . Così ora puoi modificare tutto come l'HTML, basta mettere i link come href.

<asp:GridView ID="GridViewFemale" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="LinqDataSourceFemale" Width="158px"> 
    <Columns> 
     <asp:ImageField DataImageUrlField="Image" NullImageUrl="images/INA.jpg" ShowHeader="False"></asp:ImageField> 
     <asp:TemplateField> 
      <EditItemTemplate> 
       <table> 
        <tr> 

         <td> 
          <b> Age:</b> <asp:Label ID="Label1" runat="server" Text='<%# Bind("Age") %>'></asp:Label><br /> 
          <b> Name:</b> <asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label><br /> 
          <b> Education:</b> <asp:Label ID="Label3" runat="server" Text='<%# Bind("Education") %>'></asp:Label><br /> 
          <b> Current Status:</b> <asp:Label ID="Label4" runat="server" Text='<%# Bind("CurrentStatus") %>'></asp:Label><br /> 
          <b> Height:</b> <asp:Label ID="Label5" runat="server" Text='<%# Bind("Height") %>'></asp:Label><br /> 
          <b> Complexion:</b> <asp:Label ID="Label6" runat="server" Text='<%# Bind("Complexion") %>'></asp:Label><br /> 
          <b> Caste:</b> <asp:Label ID="Label7" runat="server" Text='<%# Bind("Caste") %>'></asp:Label><br /> 
          <b> Group:</b> <asp:Label ID="Label8" runat="server" Text='<%# Bind("Group") %>'></asp:Label> 
         </td> 
        </tr> 
       </table> 
      </EditItemTemplate > 
      <ItemTemplate> 
       <table id="GridTable"> 
        <tr> 

         <td> 
          <b> Age:</b> <asp:Label ID="Label1" runat="server" Text='<%# Bind("Age") %>'></asp:Label><br /> 
          <b> Name:</b> <asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label><br /> 
          <b> Education:</b> <asp:Label ID="Label3" runat="server" Text='<%# Bind("Education") %>'></asp:Label><br /> 
          <b> Current Status:</b> <asp:Label ID="Label4" runat="server" Text='<%# Bind("CurrentStatus") %>'></asp:Label><br /> 
          <b> Height:</b> <asp:Label ID="Label5" runat="server" Text='<%# Bind("Height") %>'></asp:Label><br /> 
          <b> Complexion:</b> <asp:Label ID="Label6" runat="server" Text='<%# Bind("Complexion") %>'></asp:Label><br /> 
          <b> Caste:</b> <asp:Label ID="Label7" runat="server" Text='<%# Bind("Caste") %>'></asp:Label><br /> 
          <b> Group:</b> <asp:Label ID="Label8" runat="server" Text='<%# Bind("Group") %>'></asp:Label> 
         </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
Problemi correlati