每当我尝试运行我的程序时,在选择dropdownList1
数据后,dropdownlist2
会填充System.Data.DataViewRow
文本,而不是填充值。
我试过6小时搜索这个,但没有找到答案。
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string s1 = DropDownList1.SelectedValue.ToString();
string perfectid = string.Empty;
con.Open();
SqlDataAdapter sda1 = new SqlDataAdapter("select [Id] from [Table] where movie_name='"+s1+"'",con);
DataTable dt = new DataTable();
sda1.Fill(dt);
GridView g1 = new GridView();
g1.DataSource = dt;
g1.DataBind();
foreach (GridViewRow dr in g1.Rows)
{
perfectid = dr.Cells[0].Text;
}
SqlDataAdapter sda = new SqlDataAdapter("select song_name from songs where id='" + perfectid + "'", con);
DataTable dta = new DataTable();
sda.Fill(dta);
DropDownList2.DataSource = dta;
DropDownList2.DataBind();
con.Close();
}
答案 0 :(得分:0)
如评论中所述:
1]不要对sql查询使用字符串连接,使用参数化查询。使用sqlcommand
检查以下代码以使用parameters
。
2]我使用子查询对两个查询进行了操作,因此您只需要连接一次数据库。 [这将仅在子查询返回1行时才有效,在这种情况下应该使用ID作为参考,否则使用IN
运算符]
3]映射DropDownList2.DataSource = dta;
是不够的,您还需要映射DataTextField
和DataValueField
以确切地告知将要映射哪个列,我已经使用了索引列ref但是你也可以给出名字。根据我的说法,这是因为它在下拉列表中显示System.Data.DataViewRow
而不是值。
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string s1 = DropDownList1.SelectedValue.ToString();
string perfectid = string.Empty;
con.Open();
SqlCommand cmd = new SqlCommand("select song_name from songs where id=(select [Id] from [Table] where movie_name=@moviename",con);
cmd.Parameters.AddWithValue("@moviewname", s1);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dta = new DataTable();
sda.Fill(dta);
con.Close();
DropDownList2.DataSource = dta;
DropDownList2.DataTextField = dta.Columns[0].ColumnName;
DropDownList2.DataValueField = dta.Columns[0].ColumnName;
DropDownList2.DataBind();
}