678 messaggi dal 12 maggio 2001
www.idioteca.it
In teoria con Eval("nomeCampo") dovrebbe andare, in alternativa puoi usare (DataBinder.Eval(Container.DataItem,"nomeCampo"))
Per l'altro errore, verifica che Stato.recuperaStato sia realmente raggiungibile. Non basta metterla in App_Code, ma devi indicarla come funzione globale, ma noto un namespace, prova a scrivere Telenews.Stato.recuperaStato e dimmi se così va.
ciao
Modificato da giangi_77 il 10 gennaio 2011 18.04 -
311 messaggi dal 25 novembre 2010
ho messo la riga così:
<asp:Label runat="server" ID="lblDescrizioneStato" Text='<%# Telenews.Stato.recuperaStato(DataBinder.Eval("stato")) %>' />

compreso il namespace e DataBinder.
l'errore è questo:
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0433: The type 'Telenews.Stato' exists in both 'c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\c33f052c\29b500f6\App_Code.tjkv8jd2.dll' and 'c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\c33f052c\29b500f6\assembly\dl3\1afc132c\008934e2_68b1cb01\Telenews.DLL'
311 messaggi dal 25 novembre 2010
alla fine ho risolto così (prendendo il codice da un altro sito dell'ufficio).
ho modificato la classe Stato così (il nome della classe è a caso tanto per cambiarlo):
    public class StatoCiao
    {
        public string recuperaStato(string parametro)
        {
            return System.Configuration.ConfigurationManager.AppSettings[parametro];
        }
    }

nel code behind della pagina:
        protected string Recupera(object par)
        {
            if (par != null)
            {
                StatoCiao st = new StatoCiao();
                return st.recuperaStato(par.ToString());
            }
            return string.Empty;
        }

nella GV:
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblDescrizioneStato" Text='<%# Recupera(Eval("stato")) %>' />
                    </ItemTemplate>
                </asp:TemplateField>

adesso devo farlo nelle DDL sperando di nn avere altri problemi.
grazie mille per l'aiuto!
Modificato da fermat il 11 gennaio 2011 09.48 -
311 messaggi dal 25 novembre 2010
ho provato con ul tuo esempio:
                <asp:DropDownList ID="DropDownList6" runat="server" DataSourceID="SqlDataSource5"
                    DataValueField="stato" AppendDataBoundItems="True" AutoPostBack="True" DataTextField='<%# Recupera(Eval("stato")) %>'>
                    <asp:ListItem Selected="True" Value="0">*</asp:ListItem>
                </asp:DropDownList>

mi da questo errore:
Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

ho anche provato mettendo DataBind.Eval:
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0119: 'System.Web.UI.Control.DataBind()' is a 'method', which is not valid in the given context

e levando del tutto Eval, in debug mi da:
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

qualcuno ha qualche idea??
Modificato da fermat il 11 gennaio 2011 11.01 -
678 messaggi dal 12 maggio 2001
www.idioteca.it
come immaginavo l'idea di fare la stessa cosa su ddl non funziona... perchè non elimini sqlDatasource e ti crei il tuo databind da codice? In questo modo, una volta recuperato il "dataset" con gli id degli stati, li aggiorni con quelli presi da web.config e poi assegni il datasource alla tua ddl e fai il binding.
In alternativa puoi fare questo usando l'evento NeedDataSource del tuo sqldatasource.
Guarda se questo ti può aiutare:
http://forum.aspitalia.com/forum/post/373119/Eventi-Pagina-Aspx.aspx
Un'alternativa alla fine, può essere quella di leggere direttamente il file web.config e di ciclare tra la collezione degli appSetting recuperando i valori che ti interessano in base al nome o alla proprietà che identifica i tuoi elementi.
Considera che questo funziona se hai sempre db e web.config allineati altrimenti rischi di mostrare Stati eliminati da db, ma non da web.config.
ciao
311 messaggi dal 25 novembre 2010
nel Page_load ho messo questo con una ddl di prova:
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MYTELENEWS"].ConnectionString);
            SqlDataAdapter adapter = new SqlDataAdapter("SELECT DISTINCT stato FROM [files_deploy]", conn);
            conn.Open();
            DataSet ds = new DataSet();
            adapter.Fill(ds);

            ddlProva.AutoPostBack = true;
            ddlProva.AppendDataBoundItems = true;
            ddlProva.Items.Insert(0, new ListItem("*", "*"));
            ddlProva.DataSource = ds;
            ddlProva.DataValueField = "stato";
            ddlProva.DataTextField = "stato";    
            ddlProva.DataBind();
        }


a questo punto come potrei fare per aggiornare i valori presi dal web.config??
311 messaggi dal 25 novembre 2010
usato questa soluzione.
ho creato un metodo nel code behind che poi richiamo nell'evento ondatabound:
        protected void RowDataBound(object sender, EventArgs e)
        {
            for (Int32 i = 1; i <= DropDownList1.Items.Count; i++)
            {
                DropDownList6.Items[i].Text = Recupera(DropDownList6.Items[i].Text);
            }
        }

grazie per l'aiuto!!!!
678 messaggi dal 12 maggio 2001
www.idioteca.it
anche stavolta in ritardo... ma va bene anche quella soluzione (avevo dimenticato dell'evento databound  ).
In alternativa dovevi ciclare sul tuo dataset e recuperare i valori dal web.config con una logica simile a quella che hai fatto tu nell'evento rowdatabound. Solo a questo punto facevi
ddlProva.DataSource = ds;
dove ds è il tuo oggetto contenente id e descrizione dello stato.
ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.