2013-05-29 4 views
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(); 
} 

Где СЛНЫ это уникальное значение для каждого элемента 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)?

+0

Я думаю, вам нужно создать объект DropDownList сначала с новым ключевым словом. Вы не создаете какой-либо объект. –

+0

@Vivek Не могли бы вы показать мне код для этого? Я не делал этого в первом члене, и он работал нормально.Какая разница, чтобы вызвать проблему во второй раз, а не в первую очередь? – Austin

ответ

1

Обратите внимание, что после решения nullreference вы также хотите изменить:

ddlSelect.Items.FindByText (. Dt.Rows [0] [ "PN"] ToString());

в

ddlSelect.Items.FindByText (dt.Rows [0] [ "ПН"] ToString().) Выбранные = верно.

, так что он будет выбран

0

Я бы проверил код, который вы используете для возврата выпадающего меню, поскольку вы не используете конструктор или новое ключевое слово. Возвращает ли оно нулевое значение?

1
DropDownList ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList; 

здесь ddlSelect может быть пустым, так что вы получите System.NullReferenceException

если вы используете as оператор может возвращать нуль упаковывают не нашли контроля под названием «ddlSelect», так что лучше, чтобы добавить нулевой чек, как показано ниже

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

} 

Если вы хотите получить доступ к элементам управления шаблонами редактирования, вам необходимо проверить текущий режим, равный редактированию или нет. Если он не отредактирован, вы не сможете найти элементы управления шаблонами редактирования

if (FormView1.CurrentMode != FormViewMode.Edit) 
     return; 
//your code 
Смежные вопросы