从数据库添加到下拉列表

时间:2015-07-10 08:19:06

标签: c# asp.net gridview

我有一个只有在点击GridView的编辑按钮时才能看到的面板。

在该面板中是一个包含DropDownListTextBox的表单,您可以在其中编写一个数字并将其添加到ListBox

当我点击按钮时,所有需要的数字都被添加到ListBox。最终确定是向数据库添加数据。在Gridview我的名字是从数据库连接的,因为我分别有Lastname和Firstname。

为了更容易,当我点击具有特定ID的“编辑”按钮时,我选择在DropDownList中添加数据库。

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

  

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

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

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();
        }

    }

}

2 个答案:

答案 0 :(得分:2)

您正在查看dr1.Read()

并阅读dr[0].Tostring()

在添加数据之前,还要尝试清除列表。如果您需要显示名称

,则索引应为1

应该是

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

        }

我猜您在.Text

传递的查询中ID是数字

试试这个

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

所有方法都尝试使用参数化查询来避免SQL INJECTION

答案 1 :(得分:0)

为什么在dr作为datareader时从dr1设置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();
        }

    }

}