3

看来我的代码不完整或语法错误,但我尽力想出某种解决方案,但到目前为止没有成功......所以这就是我想要做的:我有几个下拉框,并希望将每个下拉框的选定值分配给表适配器中的值。到目前为止,这是我的代码,但不确定缺少什么:

protected void Page_Load(object sender, EventArgs e)
{
    ID = Convert.ToInt32(Request.QueryString["myID"]);
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString);
    SqlDataAdapter da = new SqlDataAdapter("SELECT NAME, DEPARTMENT, LOCATION from MyTable WHERE ID =  '" + ID + "' ", con);
    DataTable dt= new DataTable();
    da.Fill(dt);

    ddl_Name.SelectedValue = dt[0].Name;
    ddl_DEPARTMENT.SelectedValue = dt[0].DEPARTMENT;
    ddl_LOCATION.SelectedValue = dt[0].LOCATION;
}

当我输入 dt[0].Name 时,我的问题从这里开始,似乎我添加零时它不喜欢。请帮忙。谢谢

4

1 回答 1

3

dtDataTable没有索引器的,你想要DataRows 字段,所以你需要先通过以下方式获取行DataTable.Rows[index]

if(dt.Rows.Count > 0)
{
    DataRow row = dt.Rows[0];
    ddl_Name.SelectedValue = row.Field<string>("Name");
    ddl_DEPARTMENT.SelectedValue = row.Field<string>("DEPARTMENT");
    ddl_LOCATION.SelectedValue = row.Field<string>("LOCATION");
}

您不能直接访问该字段(没有强类型的DataTable)。您必须使用DataRow.Field来获取字段的值或旧的弱类型索引器:

object name = row["Name"];
  • 除此之外,您不应该使用字符串连接来构建您的 sql 查询。您可以通过 url 参数进行sql 注入。使用 sql-parameters 来防止这种情况。
  • 我假设您正在使用ViewState(默认),然后将此代码块放入!IsPostBack检查中,否则SelectedIndexChanged不会触发事件,因为用户选择将从旧数据库值中覆盖。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        ID = Convert.ToInt32(Request.QueryString["myID"]);
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString);
        SqlDataAdapter da = new SqlDataAdapter("SELECT NAME, DEPARTMENT, LOCATION from MyTable WHERE ID =  @ID", con);
        DataTable dt= new DataTable();
        da.SelectCommand.Parameters.AddWithValue("@ID", int.Parse(ID));
        da.Fill(dt);
        // Code above... 
    }   
}
于 2013-10-26T22:46:06.003 回答