Я пытаюсь создать раскрывающийся список, который я уже создал на странице редактирования начала формы, по значению, ранее выбранному из базы данных 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();
}
Где СЛНЫ это уникальное значение для каждого элемента 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)?
Я думаю, вам нужно создать объект DropDownList сначала с новым ключевым словом. Вы не создаете какой-либо объект. –
@Vivek Не могли бы вы показать мне код для этого? Я не делал этого в первом члене, и он работал нормально.Какая разница, чтобы вызвать проблему во второй раз, а не в первую очередь? – Austin