获取数据库中的命令,获得此失败无法转换类型为'System.Collections.Generic.List`1 [ValgtFrugt]'的对象以键入'System.Data.DataTable? [英] Get order in database, get this fail Unable to cast object of type 'System.Collections.Generic.List`1[ValgtFrugt]' to type 'System.Data.DataTable?

查看:70
本文介绍了获取数据库中的命令,获得此失败无法转换类型为'System.Collections.Generic.List`1 [ValgtFrugt]'的对象以键入'System.Data.DataTable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




当用户订购一些水果时,如果输入有效,他会进入新页面。因此,用户可以查看用户订购的内容,然后他可以使用联系信息进行确认。



在用户插入联系信息之前,用户可以选择其他选项来订购。



当他点击按钮时,用户订购信息,选项和水果订单可以在数据库。



bekraeft.aspx.cs



Hi
When a user order some fruits, he gets to a new page were the inputs is standing. So the user can se what the user have been order and then he could do a confirmation with the contact information.

Before the user is insert the contact information, the user have a choice to make some other options to put to the order.

And when he click on the button the users order information, options and the fruit order could be in the database.

The bekraeft.aspx.cs

public ValgtFrugt frugtKurv;
    public ValgtGroent groentKurv;
    public ValgtDeli deliKurv;
    protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["ValgteFrugter"] != null)
        {
            List<ValgtFrugt> valgteFrugter = (List<ValgtFrugt>)Session["ValgteFrugter"];
            foreach (ValgtFrugt frugt in valgteFrugter)
            {
                //Variablen "frugt" indeholder nu hvert enkelt valgtfrugt objekt og nu kan du gøre sådan:
                Label1.Text += string.Format("{0} ({1} stk.)<br />", frugt.FrugtNavn, frugt.Antal);

            }
            List<ValgtGroent> valgteGroent = (List<ValgtGroent>)Session["ValgteGroent"];
            foreach (ValgtGroent groent in valgteGroent)
            {
                //Variablen "frugt" indeholder nu hvert enkelt valgtfrugt objekt og nu kan du gøre sådan:
                Label1.Text += string.Format("{0} ({1} stk.)<br />", groent.GroentNavn, groent.AntalGroent);

            }
           
        }
        else
        {
           Label1.Text = Session["standard"].ToString();
        }        
    }
    protected void Button_putikurv_Click(object sender, EventArgs e)
    {
        int totalvaerdi = 0;

        List<ValgtDeli> valgteDeli = new List<ValgtDeli>(); //Her laver jeg en liste over valgte frugter. Det er et nyt objekt, som kan indeholde påde ID, Navn, Antal og Værdi

        foreach (RepeaterItem item in VisDeli.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                    TextBox TextBox_deli = item.FindControl("TextBox_deli") as TextBox;



                    if (!string.IsNullOrEmpty(TextBox_deli.Text))
                    {

                        opretOrdre();

                    }

                string DeliNavn = TextBox_deli.Attributes["DeliNavn"]; //Det her skal vel være en streng!?

                if (TextBox_deli.Text != null)
                {

                    if (string.IsNullOrEmpty(TextBox_deli.Text))
                    {
                        TextBox_deli.Text = "0";

                    }
                }


                int enkeltDeliAntal = int.Parse(TextBox_deli.Text);


                totalvaerdi += (enkeltDeliAntal);


                if (enkeltDeliAntal > 0)
                {
                    ValgtDeli frugtenDerskalTilfoejes = new ValgtDeli(); //Opret frugten og angiv værdier
                    frugtenDerskalTilfoejes.DeliNavn = DeliNavn;
                    frugtenDerskalTilfoejes.Antal = enkeltDeliAntal;
                    valgteDeli.Add(frugtenDerskalTilfoejes);

                }

            }
            if (totalvaerdi > 0)
            {
                Session["ValgteDeli"] = valgteDeli;
                opretOrdre();
            }

        }
        
    }
    private void opretOrdre()
    {

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "INSERT INTO ordre (dato, navn, efternavn, mobil, adresse, mail, postnr, bynavn) VALUES(GETDATE(), @navn, @efternavn, @mobil, @adresse, @mail, @postnr, @bynavn); SELECT SCOPE_IDENTITY()";

        cmd.Parameters.Add("@navn", SqlDbType.VarChar).Value = TextBox_navn.Text;
        cmd.Parameters.Add("@efternavn", SqlDbType.VarChar).Value = TextBox_efternavn.Text;
        cmd.Parameters.Add("@mobil", SqlDbType.VarChar).Value = TextBox_mobil.Text;
        cmd.Parameters.Add("@adresse", SqlDbType.VarChar).Value = TextBox_adresse.Text;
        cmd.Parameters.Add("@mail", SqlDbType.VarChar).Value = TextBox_mail.Text;
        cmd.Parameters.Add("@postnr", SqlDbType.VarChar).Value = TextBox_postnr.Text;
        cmd.Parameters.Add("@bynavn", SqlDbType.VarChar).Value = TextBox_by.Text;

        conn.Open();
        object orderId = cmd.ExecuteScalar();
        conn.Close();
        
        cmd.Parameters.Add("@fk_ordre", SqlDbType.Int).Value = orderId;
        cmd.Parameters.Add("@fk_frugt_id", SqlDbType.Int).Value = 0;
        cmd.Parameters.Add("@fk_deli_id", SqlDbType.Int).Value = 0;
        cmd.Parameters.Add("@fk_groent_id", SqlDbType.Int).Value = 0;
        cmd.Parameters.Add("@Antal", SqlDbType.Int).Value = 0;
        
        cmd.Parameters.Add("@frugt_id", SqlDbType.VarChar).Value = 0;
        cmd.Parameters.Add("@deli_id", SqlDbType.VarChar).Value = 0;
        cmd.Parameters.Add("@groent_id", SqlDbType.VarChar).Value = 0;

        DataTable dt = (DataTable)Session["ValgteFrugter"];
        DataTable dt1 = (DataTable)Session["ValgteGroent"];
        DataTable dt2 = (DataTable)Session["ValgteDeli"];
        
        DataTable dtAll = new DataTable();
        dtAll = dt.Copy();
        dtAll.Merge(dt1, true);
        dtAll.Merge(dt2, true);

                conn.Open();

        foreach (DataRow row in dtAll.Rows)
        {
            cmd.CommandText = @"INSERT INTO ordre_linie 
                                (fk_ordre_id, fk_frugt_id, fk_deli_id, fk_groent_id, antal) 
                                VALUES (@fk_ordre, @fk_frugt_id, @fk_deli_id, @fk_groent_id, @Antal)";

            cmd.Parameters["@fk_frugt_id"].Value = row["FrugtNavn"];
            cmd.Parameters["@fk_deli_id"].Value = row["DeliNavn"];
            cmd.Parameters["@fk_groent_id"].Value = row["GroentNavn"];
            cmd.Parameters["@Antal"].Value = row["Antal"];           

            cmd.ExecuteNonQuery();
        }
       
        conn.Close();
        Session.Abandon();
        Response.Redirect("tak.aspx");      
       
    }

    protected void VisDeli_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            TextBox TextBox_deli = e.Item.FindControl("TextBox_deli") as TextBox;

            if (TextBox_deli == null) return;

            TextBox_deli.Attributes.Add("DeliID", string.Format("{0}", ((DataRowView)(e.Item.DataItem)).Row["deli_id"])); //Læg en ny attribut på TextBoxen der peger på frugtens unikke ID.  
            TextBox_deli.Attributes.Add("DeliNavn", string.Format("{0}", ((DataRowView)(e.Item.DataItem))["deli_navn"])); //Læg en ny attribut på TextBoxen der peger på vaerdi.          
            
        }
    }





当我点击按钮时,我得到了这个错误:



无法将'System.Collections.Generic.List`1 [ValgtFrugt]'类型的对象强制转换为'System.Data.DataTable


第164行:

第165行:

第166行:DataTable dt =(DataTable)会话[ValgteFrugter] ;

第167行:DataTable dt1 =(DataTable)会话[ValgteGroent];

第168行:DataTable dt2 =(DataTable)会话[ValgteDeli]; < br $> b $ b

希望有人能帮帮我?



/ Tina



When I click on the button, I get this Error:

Unable to cast object of type 'System.Collections.Generic.List`1[ValgtFrugt]' to type 'System.Data.DataTable

Line 164:
Line 165:
Line 166: DataTable dt = (DataTable)Session["ValgteFrugter"];
Line 167: DataTable dt1 = (DataTable)Session["ValgteGroent"];
Line 168: DataTable dt2 = (DataTable)Session["ValgteDeli"];

Hope someone could help me?

/Tina

推荐答案

您在Session [ValgteFrugter]中存储的值的类型为 Generic List [ ^ ]。在获取值时,您将其分配给DataTable,这是一个无效的演员。



您必须先将其转换为DataTable。扩展方法 CopyToDataTable [ ^ ]可能很有用,或者您可以手动遍历列表以创建DataTable。
The value you stored in the Session["ValgteFrugter"] is of type Generic List[^]. While getting the value you are assigning it to a DataTable which is an invalid cast.

You will have to convert it to a DataTable first. Extension method CopyToDataTable[^] may be useful or you may loop through the list manually to create a DataTable.


这篇关于获取数据库中的命令,获得此失败无法转换类型为'System.Collections.Generic.List`1 [ValgtFrugt]'的对象以键入'System.Data.DataTable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆