System.Data.DataViewRow显示而不是值

时间:2016-03-26 09:51:23

标签: c#

每当我尝试运行我的程序时,在选择dropdownList1数据后,dropdownlist2会填充System.Data.DataViewRow文本,而不是填充值。 我试过6小时搜索这个,但没有找到答案。

enter image description here

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

1 个答案:

答案 0 :(得分:0)

如评论中所述:

1]不要对sql查询使用字符串连接,使用参数化查询。使用sqlcommand检查以下代码以使用parameters

2]我使用子查询对两个查询进行了操作,因此您只需要连接一次数据库。 [这将仅在子查询返回1行时才有效,在这种情况下应该使用ID作为参考,否则使用IN运算符]

3]映射DropDownList2.DataSource = dta;是不够的,您还需要映射DataTextFieldDataValueField以确切地告知将要映射哪个列,我已经使用了索引列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();
}