Avatar billede sbaht Nybegynder
18. juni 2007 - 21:22 Der er 21 kommentarer og
1 løsning

Hvad betyder denne serverfejl?

Er der nogen der kan forklare følgende fejl:

Server Error in '/Renlog' Application.
--------------------------------------------------------------------------------

DataBinder.Eval: 'System.Data.Common.DbDataRecord' does not contain a property with the name KontrolID.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: DataBinder.Eval: 'System.Data.Common.DbDataRecord' does not contain a property with the name KontrolID.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:


[HttpException (0x80004005): DataBinder.Eval: 'System.Data.Common.DbDataRecord' does not contain a property with the name KontrolID.]
  System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) +146
  System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName, String format) +11
  System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +473
  System.Web.UI.Control.DataBind() +26
  it.dk\rensningslog\renslog.aspx.cs:97
  System.Web.UI.Control.OnLoad(EventArgs e) +67
  System.Web.UI.Control.LoadRecursive() +35
  System.Web.UI.Page.ProcessRequestMain() +750
Avatar billede dr_chaos Nybegynder
18. juni 2007 - 21:38 #1
Det betyder at du kalder Eval("KontrolID") et eller andet sted.
Men den datasource som du bruger f.eks. en sqldatasource eller lignende ikke indeholder en kolonne kaldet kontrolid
Avatar billede bubbaa Nybegynder
18. juni 2007 - 21:39 #2
Du prøver at hente noget der hedder KontrolID, men det findes ikke?
Avatar billede sbaht Nybegynder
18. juni 2007 - 21:47 #3
Det undrer mig bare idt for jeg har netop en kolonne der hedder KontrolID, det er i en Access database.
Koden ser således ud:

string DbStr;
                DbStr=Server.MapPath("db/Renslog.mdb");
                string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+DbStr;
               
                string strsql = "Select Kontrol From tblKontrol;";
                OleDbConnection objConnection  = new OleDbConnection(strConnection);
                OleDbCommand objCommand = new OleDbCommand(strsql,objConnection);
                objConnection.Open();
                DropDownList1.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList1.DataTextField = "Kontrol";
                //DropDownList1.DataValueField = "KontrolID";
                DropDownList1.DataBind();
                DropDownList1.Items.Insert(0, new ListItem("Vælg Kontrolrum", ""));

                string DbStr1;
                DbStr1=Server.MapPath("db/Rensningslog.mdb");   
                string strConnection1 = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+DbStr1;
                string strsql1 = "Select Udstyr From tblRens_Udstyr Where KontrolID='"+DropDownList1.SelectedItem.Value+"' ORDER BY Udstyr ASC;";
                OleDbConnection objConnection1 = new OleDbConnection(strConnection1);
                OleDbCommand objCommand1 = new OleDbCommand(strsql1,objConnection1);
                objConnection1.Open();
                DropDownList2.DataSource = objCommand1.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList2.DataTextField = "Udstyr";
                DropDownList2.DataValueField = "Udstyr";
                DropDownList2.DataBind();
                DropDownList2.Items.Insert(0, new ListItem("Vælg Udstyr", ""));
            }
Avatar billede neoman Novice
18. juni 2007 - 22:00 #4
Du har kolonnen i  Access, men du har jo ikke bedt om at få værdien i nogen af dine SQL queries
Avatar billede lifo Nybegynder
18. juni 2007 - 22:01 #5
din sql selecter kun kontrol og ikke kontrolId
string strsql = "Select Kontrol From tblKontrol;";
skal være
string strsql = "Select Kontrol,KontrolID From tblKontrol;";
Avatar billede sbaht Nybegynder
18. juni 2007 - 22:06 #6
Jeg bér om værdien her  string strsql1 = "Select Udstyr From tblRens_Udstyr Where KontrolID='"+DropDownList1.SelectedItem.Value+"' ORDER BY Udstyr ASC;";

Der skal indlæses noget i en dropdownliste udfra et valg i en foregående dropdownliste.
Avatar billede neoman Novice
18. juni 2007 - 22:12 #7
Nope - du beder om at få "Udstyr", hvor værdien i samme række for KontrolID er lig med din DDL.Selectedvalue.

Hvis du vil have væriden med i selecten, så gør som LIFO skriver. Ting i "WHERE"-betingelsen kommer ikke automatisk med i resultatet, medmindre du beder om det a la lifo's select
Avatar billede lifo Nybegynder
18. juni 2007 - 22:14 #8
ændr
string strsql = "Select Kontrol From tblKontrol;";
til
string strsql = "Select Kontrol,KontrolID From tblKontrol;";
og
//DropDownList1.DataValueField = "KontrolID";
til
DropDownList1.DataValueField = "KontrolID";
så skulle det funke(tror jeg)
Avatar billede sbaht Nybegynder
18. juni 2007 - 22:27 #9
Jeg forstår det ikke helt- Jeg skal indlæse de records fra kolonnen Udstyr der er lig med kontrolID. Jeg skal kun have en kolonne indlæst min første ddl.
Avatar billede neoman Novice
18. juni 2007 - 22:36 #10
I så fald :

string strsql = "Select KontrolID From tblKontrol;";
DropDownList1.DataValueField = "KontrolID";
DropDownList1.DataTextField = "KontrolID";
Avatar billede lifo Nybegynder
18. juni 2007 - 22:41 #11
din første ddl skal have 2 værdier en til tekst som bliver vist(Kontrol) og en værdi (kontrolID) som der værdi teksten representerer
eller er det som du vil have ud det samme som du vil vise
Avatar billede lifo Nybegynder
18. juni 2007 - 22:57 #12
her et et simpelt eksempel med et objekt som er databound men det funker på samme måde med data fra DB
en side med en ddl og en label

using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<KClass> kontroller = new List<KClass>();
            kontroller.Add(new KClass("kontrol 1", 1));
            kontroller.Add(new KClass("kontrol 2", 2));
            kontroller.Add(new KClass("kontrol 3", 3));
            kontroller.Add(new KClass("kontrol 4", 4));

            DropDownList1.DataSource = kontroller;
            DropDownList1.DataTextField = "Kontrol";
            DropDownList1.DataValueField = "KontrolID";
            DropDownList1.DataBind();
        }
       
       
    }
    public class KClass
    {
        private int kontrolId;
        private string kontrol;
        public int KontrolID
        {
            get { return kontrolId; }
        }
        public string Kontrol
        {
            get { return kontrol; }
        }
        public KClass(string kontrol, int kontrolId)
        {
            this.kontrol = kontrol;
            this.kontrolId = kontrolId;
        }
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int valgtVerdi = Convert.ToInt32(DropDownList1.SelectedValue);
        Label1.Text = "valgt verdi " + valgtVerdi;
    }
}
Avatar billede sbaht Nybegynder
18. juni 2007 - 23:09 #13
Hmm jeg får ingen fejl nu, men der kommer ikke nogen værdier ddl 2.

string strsql = "Select Kontrol, KontrolID From tblKontrol;";
                OleDbConnection objConnection  = new OleDbConnection(strConnection);
                OleDbCommand objCommand = new OleDbCommand(strsql,objConnection);
                objConnection.Open();
                DropDownList1.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList1.DataTextField = "Kontrol";
                DropDownList1.DataValueField = "KontrolID";
                DropDownList1.DataBind();
                DropDownList1.Items.Insert(0, new ListItem("Vælg Kontrol", ""));

                string DbStr1;
                DbStr1=Server.MapPath("db/Renslog.mdb");   
                string strConnection1 = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+DbStr1;
                string strsql1 = "Select Udstyr From tblRens_Udstyr Where Kontrolrum='"+DropDownList1.SelectedItem.Value+"' ORDER BY Udstyr ASC;";
                OleDbConnection objConnection1 = new OleDbConnection(strConnection1);
                OleDbCommand objCommand1 = new OleDbCommand(strsql1,objConnection1);
                objConnection1.Open();
                DropDownList2.DataSource = objCommand1.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList2.DataTextField = "Udstyr";
                DropDownList2.DataValueField = "Udstyr";
                DropDownList2.DataBind();
                DropDownList2.Items.Insert(0, new ListItem("Vælg Udstyr", ""));
Avatar billede lifo Nybegynder
18. juni 2007 - 23:13 #14
hvor har du den anden kodeblok ?
i hvilken metode ?
Avatar billede lifo Nybegynder
18. juni 2007 - 23:15 #15
kan se at du bruger ExecuteReader så jeg håber at det ikke er hele koden og at du får lukket din reader
Avatar billede sbaht Nybegynder
18. juni 2007 - 23:19 #16
Det ser sådan her ud:


private void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            {                
                DateTime datNow = DateTime.Now;
                lblTime.Text = "" + datNow.ToString("H:mm:ss");
                lblDate.Text = DateTime.Now.ToString("dd-MM-yyyy");
                //lblDate.Text = DateTime.Now.ToShortDateString();
            }
            if (!(IsPostBack))
            {

string strsql = "Select Kontrol, KontrolID From tblKontrol;";
                OleDbConnection objConnection  = new OleDbConnection(strConnection);
                OleDbCommand objCommand = new OleDbCommand(strsql,objConnection);
                objConnection.Open();
                DropDownList1.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList1.DataTextField = "Kontrol";
                DropDownList1.DataValueField = "KontrolID";
                DropDownList1.DataBind();
                DropDownList1.Items.Insert(0, new ListItem("Vælg Kontrol", ""));

                string DbStr1;
                DbStr1=Server.MapPath("db/Renslog.mdb");   
                string strConnection1 = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+DbStr1;
                string strsql1 = "Select Udstyr From tblRens_Udstyr Where Kontrolrum='"+DropDownList1.SelectedItem.Value+"' ORDER BY Udstyr ASC;";
                OleDbConnection objConnection1 = new OleDbConnection(strConnection1);
                OleDbCommand objCommand1 = new OleDbCommand(strsql1,objConnection1);
                objConnection1.Open();
                DropDownList2.DataSource = objCommand1.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList2.DataTextField = "Udstyr";
                DropDownList2.DataValueField = "Udstyr";
                DropDownList2.DataBind();
                DropDownList2.Items.Insert(0, new ListItem("Vælg Udstyr", ""));
Avatar billede lifo Nybegynder
18. juni 2007 - 23:26 #17
delen til ddl2 skal ikke være sammen med delen til ddl1

if (!(IsPostBack))
            {

string strsql = "Select Kontrol, KontrolID From tblKontrol;";
                OleDbConnection objConnection  = new OleDbConnection(strConnection);
                OleDbCommand objCommand = new OleDbCommand(strsql,objConnection);
                objConnection.Open();
                DropDownList1.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList1.DataTextField = "Kontrol";
                DropDownList1.DataValueField = "KontrolID";
                DropDownList1.DataBind();
                DropDownList1.Items.Insert(0, new ListItem("Vælg Kontrol", ""));
}
og så må du hoocke dig op på SelectedIndexChanged eventnen på ddl1
noget således
og måske også sætte den til auto post back

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string DbStr1;
                DbStr1=Server.MapPath("db/Renslog.mdb"); 
                string strConnection1 = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+DbStr1;
                string strsql1 = "Select Udstyr From tblRens_Udstyr Where Kontrolrum='"+DropDownList1.SelectedItem.Value+"' ORDER BY Udstyr ASC;";
                OleDbConnection objConnection1 = new OleDbConnection(strConnection1);
                OleDbCommand objCommand1 = new OleDbCommand(strsql1,objConnection1);
                objConnection1.Open();
                DropDownList2.DataSource = objCommand1.ExecuteReader(CommandBehavior.CloseConnection);
                DropDownList2.DataTextField = "Udstyr";
                DropDownList2.DataValueField = "Udstyr";
                DropDownList2.DataBind();
                DropDownList2.Items.Insert(0, new ListItem("Vælg Udstyr", ""));
    }
Avatar billede lifo Nybegynder
18. juni 2007 - 23:29 #18
husk når du har med DataReaders at gøre må du huske at kalde Close()
ellers kommer du hurtigt at løbe tør for connections
Avatar billede sbaht Nybegynder
18. juni 2007 - 23:38 #19
Ok ja selvfølgelig skal de ikke være samme sted, det giver jo næsten sig selv... Ser lige om det ikke kommer til at virke nu.
Avatar billede sbaht Nybegynder
18. juni 2007 - 23:45 #20
Perfekt det virker...Tak for det - Der er lidt point klar.
Avatar billede lifo Nybegynder
18. juni 2007 - 23:49 #21
Det var godt du fik det at funke
Avatar billede sbaht Nybegynder
18. juni 2007 - 23:54 #22
Jep...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester