1

フォームビューの編集ページ内で既に作成したドロップダウンリストを、現在のユーザーの 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 はドロップダウンリスト内の各アイテムの一意の値であり、PN はドロップダウンリスト内の各アイテムの背景情報です。強調表示されている項目を、その特定のユーザーがデータベースに既に保存している内容に対応する 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();
    }

しかし、保存された値が選択された状態でドロップダウンリストが開始されないため、私はまだ行き詰まっています。これを修正する方法を知っていますか?間違ったコマンドを使用していますか (ModeChanging 以外のものを使用する必要があります)?

4

3 に答える 3