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'的属性。”