Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在下拉列表中预选文本_C#_.net_Sql_Drop Down Menu_Formview - Fatal编程技术网

C# 在下拉列表中预选文本

C# 在下拉列表中预选文本,c#,.net,sql,drop-down-menu,formview,C#,.net,Sql,Drop Down Menu,Formview,我正在尝试使我已经在formview的编辑页面内创建的dropdownlist从之前为当前用户从sql数据库中选择的值开始 到目前为止,我有填充下拉列表的代码可以正常工作: protected void ddlSelect_Init(object sender, EventArgs e) { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ReinstatementCS"].Con

我正在尝试使我已经在formview的编辑页面内创建的dropdownlist从之前为当前用户从sql数据库中选择的值开始

到目前为止,我有填充下拉列表的代码可以正常工作:

protected void ddlSelect_Init(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ReinstatementCS"].ConnectionString);
    SqlCommand myCommand = new SqlCommand("SELECT Prefix, Number, ClassSection, Location, StartTime, EndTime, ClassDay, Prefix + Number  + ', Section: ' + CAST(ClassSection AS VarChar) +  ', Location: ' + Location + ', Start Time: ' + StartTime + ', End Time: ' + EndTime + ', Days: ' + ClassDay + ', Credits: ' + CAST(ClassCredit AS VarChar) AS PN, Capacity, GPAReqAbove1, GPAReqBelow1, CreditReqAbove30, CreditReqBelow30, ClassCredit, IsTransfer, SLN FROM Classes");
    myCommand.Connection = con;
    SqlDataAdapter da = new SqlDataAdapter(myCommand);
    DataTable dt = new DataTable();
    da.Fill(dt);

    DropDownList ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList;
    ddlSelect.DataSource = dt;
    ddlSelect.DataTextField = "PN";
    ddlSelect.DataValueField = "SLN";
    ddlSelect.DataBind();

    con.Close();
}
其中SLN是dropdownlist中每个项目的唯一值,PN是dropdownlist中每个项目的背景信息。我希望突出显示的项目是与特定用户已存储在数据库中的内容相对应的PN。问题是,当我尝试选择该值时,我使用的是:

protected void FVStudentClass_ModeChanging(object sender, FormViewModeEventArgs e)
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ReinstatementCS"].ConnectionString);
    SqlCommand myCommand = new SqlCommand("SELECT Prefix + Number  + ', Section: ' + CAST(ClassSection AS VarChar) +  ', Location: ' + Location + ', Start Time: ' + StartTime + ', End Time: ' + EndTime + ', Days: ' + ClassDay + ', Credits: ' + CAST(ClassCredit AS VarChar) AS PN, SLN FROM Classes JOIN StudentClass on SLN = SCClass WHERE SCWSUID = " + Request.QueryString["ALWSUID"]);
    myCommand.Connection = con;
    SqlDataAdapter da = new SqlDataAdapter(myCommand);
    DataTable dt = new DataTable();
    da.Fill(dt);

    DropDownList ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList;
    ddlSelect.DataSource = dt;

    ddlSelect.Items.FindByText(dt.Rows[0]["PN"].ToString());
    con.Close();        
}
以及获取错误:

System.NullReferenceException: Object reference not set to an instance of an object.
在线与:

ddlSelect.DataSource = dt;
有人知道如何解决这个问题吗?或者我应该提供更多信息吗?提前谢谢

编辑:

我听从了你们的建议,现在我做到了:

 protected void FVStudentClass_ModeChanging(object sender, FormViewCommandEventArgs e)
    {
        if (FVStudentClass.CurrentMode != FormViewMode.Edit)
            return;
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ReinstatementCS"].ConnectionString);
        SqlCommand myCommand = new SqlCommand("SELECT Prefix + Number  + ', Section: ' + CAST(ClassSection AS VarChar) +  ', Location: ' + Location + ', Start Time: ' + StartTime + ', End Time: ' + EndTime + ', Days: ' + ClassDay + ', Credits: ' + CAST(ClassCredit AS VarChar) AS PN, SLN FROM Classes JOIN StudentClass on SLN = SCClass WHERE SCWSUID = " + Request.QueryString["ALWSUID"]);
        myCommand.Connection = con;
        SqlDataAdapter da = new SqlDataAdapter(myCommand);
        DataTable dt = new DataTable();
        da.Fill(dt);
        DropDownList ddlSelect = new DropDownList();
        ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList;
        if (ddlSelect != null)
        {
            ddlSelect.DataSource = dt;
            ddlSelect.Items.FindByText(dt.Rows[0]["PN"].ToString()).Selected = true;
        }
        con.Close();
    }

但是我仍然被卡住了,因为dropdownlist并不是以选择的保存值开始的。你知道怎么解决这个问题吗?我是否使用了错误的命令(是否应该使用除ModeChanging之外的其他命令)?

我会检查用于返回下拉菜单的代码,因为您没有使用构造函数或new关键字。它是否返回空值

DropDownList ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList;
在这里,ddlSelect可以为null,因此您可以得到
System.NullReferenceException

如果您使用
作为
运算符,在未找到名为“ddlSelect”的控件的情况下,它可以返回null,因此最好添加如下的null检查

if(ddlSelect !=null)
{
   // do the bindings 

}
如果要访问“编辑模板”控件,需要检查当前模式是否等于“编辑”。如果不是“编辑”,则找不到“编辑模板”控件

if (FormView1.CurrentMode != FormViewMode.Edit)
        return;
//your code 

请注意,在解决nullreference后,您还需要更改:

ddlSelect.Items.FindByText(dt.Rows[0][“PN”].ToString())

进入

ddlSelect.Items.FindByText(dt.Rows[0][“PN”].ToString()).Selected=true


这样它就被选中了

我想你必须先用new关键字创建DropDownList对象。你没有创建任何对象。@Vivek你能给我看一下代码吗?我在第一个成员中没有这样做,它工作正常。第二次出现问题与第一次出现问题有什么区别?