Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 38
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    708

    DropDownList che inserisce altro valore

    Ciao

    sto modificando una pagina asp.net tipo c# ... e non è la mia materia!

    Ho inserito in un modulo di inserimento dati x db access, una DropDownList che visualizza i valori di questa query:

    sql5 = "SELECT CODICE_SUPER_CATEGORIA FROM TabSuperCategoria";

    ... nell'elenco visualizzo i valori di tipo testo del CODICE_SUPER_CATEGORIA come:

    Abbigliamento
    Ombrelli
    Scarpe

    Selezionato il valore e cliccato sul tasto di inserimento, vorrei far scrivere nella TabGallery del mio db, invece che il valore di testo, come ad es.: Abbigliamento, il valore numero dell' ID_SUPER_CATEGORIA.

    Come posso fare?

    Anche in TabGallery ci sono i campi ID_SUPER_CATEGORIA ed CODICE_SUPER_CATEGORIA.
    codice:
    string sqlString = "INSERT INTO [TabGallery] (NOME,CODICE_SUPER_CATEGORIA, ID_SUPER_CATEGORIA) VALUES ('" + NOME + "',  '" + codice_super_categoria + "', '" + id_super_categoria + "');";
    
    string NOME = "";
    if ( (nome.Text != "") && ((nome.Text.ToString()).Length > 0) ) NOME = nome.Text;
    NOME = NOME.Replace("'","''"); 
    
    string CODICE_SUPER_CATEGORIA = ""; //Tipo Testo
    if ( (codice_super_categoria.SelectedItem.Text != "") && ((codice_super_categoria.SelectedItem.Text.ToString()).Length > 0) ) CODICE_SUPER_CATEGORIA = codice_super_categoria.SelectedItem.Text;
      CODICE_SUPER_CATEGORIA = CODICE_SUPER_CATEGORIA.Replace("'","''"); 
      
    string ID_SUPER_CATEGORIA = "0"; //Tipo Numerico Intero
    if ( (id_super_categoria.SelectedItem.Text != "") && ((id_super_categoria.SelectedItem.Text.ToString()).Length > 0) ) ID_SUPER_CATEGORIA = id_super_categoria.SelectedItem.Text;
    
    InserisciNomiDeiFilesNelDB_Access(ListaNomi, '|', NOME, CODICE_SUPER_CATEGORIA, ID_SUPER_CATEGORIA);
    
    string NOME = "Default";
    string CODICE_SUPER_CATEGORIA ="";
    string ID_SUPER_CATEGORIA ="0";
    Potete aiutarmi?

    Pier

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    L'oggetto ListItem in asp.net di cui sono composte le colection Items delle DropDownList hanno due proprietà: Text e Value. Text è quelo che viene visualizzato, mentre Value è il suo valore effettivo. In Text ci metti i codici e in Value gli metti gli ID e all'occorrenza puoi far riferimento ad una o all'altra proprietà.

    P.S.
    Il modo con cui scrivi le query e soprattutto il DB non vano bene. Le query dovresti farle diventare parametriche mentre nel DB non dovresti avere CODICE_SUPER_CAT nella tabella gallery ma solo l'ID_SUPER_CAT(FK) e una relazione uno a molti tra la tabella SUPER_CAT e quella della Gallery.(my 2 €-cents)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    708
    Ciao

    posso chiederti di farmi un esempio? Ho capito la funzione del value ma non ho capito se devo aggiungerlo direttamente alla DropDownList nel file aspx, così::
    codice:
    <asp: DropDownList ID="id_super_categoria" text="codice_super_categoria" value="id_super_categoria" runat="Server" />
    
    oppure modificare qlc nel file .cs ad esempio qui:
    //----------------------------------------------------------------
      sql5 = "SELECT * FROM TabSuperCategoria ORDER BY NOME asc";
      cmd5 = new OleDbCommand(sql5, connDB);
      aReader5 = cmd5.ExecuteReader();
      if (!Page.IsPostBack) 
      {
      ArrayList values = new ArrayList();
      try
      {
      	values.Add("");
        while (aReader5.Read()) 
        {
          //Response.Write("Letto elemento:" + aReader[0] + "
    ");
          values.Add("");
          values.Add(aReader5[0]);
        }
        id_super_categoria.DataSource = values;
        id_super_categoria.DataBind();
      } //estrazione dati da DB per codice categoria
      finally
      {
        aReader5.Close();
      }
     	}
    //-------------------------------------------------------------
    oppure:
    codice:
    //-------------------------------------------------------------
    string ID_SUPER_CATEGORIA = "0"; //Tipo Numerico Intero
    if ( (id_super_categoria.SelectedItem.Text != "") && ((id_super_categoria.SelectedItem.Text.ToString()).Length > 0) ) ID_SUPER_CATEGORIA = id_super_categoria.SelectedItem.Text;
    //-------------------------------------------------------------
    scusami ma x me è un argomento nuovo!
    Ti ringrazio x il consiglio del "P.S." farò come mi hai consigliato!

    Pier

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    708
    non c'è verso ho provato sia così:

    id_super_categoria.DataSource = values;
    id_super_categoria.DataTextField = "CODICE_SUPER_CATEGORIA";
    id_super_categoria.DataBind();

    che così:

    codice_super_categoria.DataSource = values;
    //codice_super_categoria.DataTextField;
    codice_super_categoria.DataValueField = "id_super_categoria";
    codice_super_categoria.DataBind();

  5. #5
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Ok (effettivamente rileggendomi forse non sono stato di grande aiuto).

    Con il datasource e senza code behind:

    codice:
    <asp: DropDownList ID="DDLSuperCat" runat="server"  
        DataSourceID="AccessDataSource1" 
        DataTextField="Codice_Super_Cat"  
        DataValueField="ID_Super_Cat">   
    </asp: DropDownList>   
    <asp:AccessDataSource ID="DSSuperCat" runat="server"  
        DataFile="~/App_Data/database.mdb" 
        SelectCommand="SELECT * FROM TabSuperCategoria ORDER BY NOME asc">   
    </asp:AccessDataSource>
    oppure nel code behind, dopo la ExecuteReader senza ciclare il result, bindi la DropDown direttamente al result:

    codice:
    DropDownList1.DataSource = aReader5;
    DropDownList1.DataTextField = "Codice_Super_Cat";
    DropDownList1.DataValueField = "ID_Super_Cat";
    DropDownList1.DataBind();
    oppure come stavi facendo tu, ma dovresti riempire una dictionary invece di un arrayList e fare come sopra solo che al posto di codice e id vanno messi "Value" e "Key".

    Il primo metodo, quello con accessDatasource, è piu semplice e lo puoi fare in modo visuale senza scrivere il codice, direttamente dall'ide di VS.
    Lo svantaggio è che se inizi ad avere la necessità di fare cose un po piu articolate (insert, delete, filtri, master detail) la pagina asp.net ti si imputtana di controlparameter, query sql ecc.

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Pierhagi, per favore inserisci il codice fra i tag CODE

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    708
    Ciao

    volevi dire così:

    codice:
      sql5 = "SELECT * FROM TabSuperCategoria ORDER BY NOME asc";
      cmd5 = new OleDbCommand(sql5, connDB);
      aReader5 = cmd5.ExecuteReader();
      id_super_categoria.DataSource = aReader5;
      id_super_categoria.DataTextField = "codice_super_categoria";
      id_super_categoria.DataValueField = "id_super_categoria";
      id_super_categoria.DataBind();
    
      if (!Page.IsPostBack) 
      {
      ArrayList values = new ArrayList();
      try
      {
      	values.Add("");
        while (aReader5.Read()) 
        {
          //Response.Write("Letto elemento:" + aReader[0] + "
    ");
          values.Add("");
          values.Add(aReader5[0]);
        }	
      } //estrazione dati da DB per codice categoria
      finally
      {
        aReader5.Close();
      }
     	}

    ...facendo in questo modo non mi scrive nel db.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    708
    ...non sono riuscito a risolvere, qlc può aiutarmi?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    708
    Ciao

    ho fatto un ordine nel mio db e nella mia testa ed ho fatto un passettino avanti!

    Prima di tutto il codice_super_categoria non mi serve +, quindi il mio unico obbiettivo è estrarre ed inserire correttamente l' ID_CATEGORIA.

    Il codice che utilizzo ora mi permetta di scrivere correttamente nel db, l'ID_CATEGORIA ma nella DropDownList estraggo e visualizzo il valore NUMERICO dell' id...forse perchè questo campo è dichiarato come string ID_CATEGORIA? Il campo dove viene scritto il valore in TabGallery è di Tipo Numero Intero.

    Il codice che mi funziona ora è questo:

    codice:
      sql3 = "SELECT id_categoria, nome FROM TabCategoria ORDER BY NOME asc";// WHERE NOME = CODICE_SUPER_CATEGORIA ORDER BY NOME asc";
      cmd3 = new OleDbCommand(sql3, connDB);
      aReader3 = cmd3.ExecuteReader();
    
    
      if (!Page.IsPostBack) 
      {
      ArrayList values = new ArrayList();
      try
      {
      	values.Add("");
        while (aReader3.Read()) 
        {
          //Response.Write("Letto elemento:" + aReader[0] + "
    ");
    	  values.Add("");
    	  values.Add(aReader3[0]);
    	  id_categoria.DataSource = aReader3;
          id_categoria.DataTextField = "id_categoria";
          id_categoria.DataValueField = "id_categoria";
          id_categoria.DataBind();
        }
    	//id_categoria.DataSource = values;
        //id_categoria.DataBind();
      } //estrazione dati da DB per codice categoria
      finally
      {
        aReader3.Close();
      }
     	}
    ho scritto lo stesso codice modificando le il DataTextField facendo visualizza il NOME della categoria così:

    codice:
    id_categoria.DataTextField = "nome";
    id_categoria.DataValueField = "id_categoria";
    ....ma così facendo non scrive + il valore nel db xchè il campo di TabGallery è di tipo Numerico Intero!

  10. #10
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    posta il codice che non funziona, quello che dovrebbe scrivere nel db

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.