C# 从数据库添加到dropdownlist时出错

C# 从数据库添加到dropdownlist时出错,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个面板,只有在单击GridView中的编辑按钮时才可见 在该面板中有一个表单,其中有一个下拉列表和一个文本框,您可以在其中写入一个数字并将其添加到列表框 当我点击Finalize按钮时,所有需要的数字都被添加到列表框中后,Finalize正在将数据添加到数据库中。在Gridview中,我从数据库中连接了名称,因为我分别有Lastname和Firstname 为了更简单,当我点击带有特定ID的编辑按钮时,我选择了从数据库中添加DropDownList 单击“编辑”按钮时,将显示此错误: 由于

我有一个面板,只有在单击
GridView
中的编辑按钮时才可见

在该面板中有一个表单,其中有一个
下拉列表
和一个
文本框
,您可以在其中写入一个数字并将其添加到
列表框

当我点击Finalize按钮时,所有需要的数字都被添加到
列表框中后,Finalize正在将数据添加到数据库中。在
Gridview
中,我从数据库中连接了名称,因为我分别有Lastname和Firstname

为了更简单,当我点击带有特定ID的编辑按钮时,我选择了从数据库中添加
DropDownList

单击“编辑”按钮时,将显示此错误:

由于对象的当前状态,操作无效

在我添加的行中
DropDownList
。我验证了我的数据库、表的名称以及所有名称是否正确。我甚至只尝试使用firstname,而不是concatenate,它也会出现同样的错误。我不知道怎么了。我希望你能帮助我。这是出现错误的代码

protected void btnEditSO_Click(object sender, EventArgs e)
{
    panelSO.Visible = true;
    btnFinalizeSO.Text = " Update ";

    Button but = (Button)sender;
    GridViewRow grid = (GridViewRow)but.NamingContainer;

    string select_sql_SOddl = "SELECT ID, (LASTNAMER | | ' ' | | FIRSTNAMER ) AS REFERENTNAME FROM REFERENT_SHIPPING WHERE ID=" + grid.Cells[14].Text;

    using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["DBCS"].ToString()))
    {
        con.Open();

        OracleCommand cmd1 = new OracleCommand(select_sql_SOddl, con);

        OracleDataReader dr1 = cmd1.ExecuteReader();

        while (dr1.Read())
        {
            ddlReferentShip.Items.Add(dr[0].ToString());
         // ddlReferentShip.Items.Add(dr["REFERENTNAME"].ToString());
         //   ddlReferentShip.DataSource = dr1;
        //    ddlReferentShip.DataTextField = dr1["REFERENTNAME"].ToString();
        //    ddlReferentShip.DataValueField = dr1["ID"].ToString();               
        //    ddlReferentShip.DataBind();
        }

    }

}

当您将
dr1
设置为数据读取器时,为什么从
dr
设置ddl项

也许你可以试试这个:

protected void btnEditSO_Click(object sender, EventArgs e)
{
    panelSO.Visible = true;
    btnFinalizeSO.Text = " Update ";

    Button but = (Button)sender;
    GridViewRow grid = (GridViewRow)but.NamingContainer;

    string select_sql_SOddl = "SELECT ID, (LASTNAMER | | ' ' | | FIRSTNAMER ) AS REFERENTNAME FROM REFERENT_SHIPPING WHERE ID=" + grid.Cells[14].Text;


    using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["DBCS"].ToString()))
    {
        con.Open();
        OracleCommand cmd = new OracleCommand(select_sql_SO, con);
        OracleCommand cmd1 = new OracleCommand(select_sql_SOddl, con);
        OracleDataReader dr = cmd.ExecuteReader();
        OracleDataReader dr1 = cmd1.ExecuteReader();

        int i=0;
        while (dr1.Read())
        {
            ddlReferentShip.Items.Add(dr1[1].ToString());
            i++;
         // ddlReferentShip.Items.Add(dr["REFERENTNAME"].ToString());
         //   ddlReferentShip.DataSource = dr1;
        //    ddlReferentShip.DataTextField = dr1["REFERENTNAME"].ToString();
        //    ddlReferentShip.DataValueField = dr1["ID"].ToString();               
        //    ddlReferentShip.DataBind();
        }

    }

}

您正在检查
dr1.Read()

并读取
dr[0].Tostring()

在添加数据之前,还要尝试清除列表。如果需要显示名称,则索引应为1

应该是

 while (dr1.Read())
        {
            ddlReferentShip.Items.Add(dr1[1].ToString());

        }
我猜在您作为
传递的查询中ID是数字。Text

试试这个

string select_sql_SOddl = "SELECT ID, (LASTNAMER | | ' ' | | FIRSTNAMER ) AS REFERENTNAME 
FROM REFERENT_SHIPPING WHERE ID=" + Convert.ToInt32(grid.Cells[14].Text);

另外,所有的方法都试图使用参数化查询来避免

什么是select\u sql\u SO?我用我知道的每种方法都试过了。注释行我也试过了,但不工作,这是我代码中的东西,但我删除了它,我在这里发布时忘记删除sql。对不起,检查一下你的情况。我认为您的查询没有返回任何行。请执行一项操作,删除where条件和额外代码cmd1、dr1。对查询和一个datareader进行操作,然后尝试。是的,是的,但不起作用。它没有显示错误,但在下拉列表中没有显示任何内容。它显示了我的默认值Select@Ralucaionescu你能告诉我你需要展示什么吗1.我没有完全理解sorry@Ralucaionescu我希望ID是整数,并且在查询中您正在检查为。网格值的文本尝试将其转换为int,并将其放入查询中。。也尝试使用参数化查询我拥有网格视图,当我在我的dropdownlist添加引用名称,该引用名称与该行ID的姓氏和姓氏连接在一起。我不知道如何准确地从GridView中添加,我选择直接从数据库中添加,ID=列cu ID ul specific randuluiyes,现在我尝试了。对不起,我迟了回答。我不工作。它仍然没有显示任何内容。我尝试使用datatextfield和datavaluefield,它告诉我“DataBinding:'System.Data.DataRowView'不包含名为'Boia C'的属性。”