2013-03-12 5 views
0

У меня есть форма, связанная с объектным источником данных. Что objectdatasource получает свои значения из коллекции списков. Есть несколько элементов управления текстовыми полями, которые я должен был отключить для раскрывающегося списка, чтобы реализовать каскадный выпадающий список. Значения заполняются отлично, каскадный выпадающий список работает отлично, но на вставке я получаю это раздражающее бесполезное сообщениеAsp.net Formview с использованием C#

«Индекс находился за пределами массива». Поэтому я пытался понять это и не могу.

Предполагая, что это мой DropDownList вызывает проблему я пытался добавить этот код в код позади, как я вручную их обязательными, поэтому они не имеют текста =»<% # Bind („GroupID“)%>

protected void formGroupInput_ItemInserting(object sender, FormViewInsertEventArgs e) 
{ 

    if (formGroupInput.CurrentMode == FormViewMode.Insert) 
    { 
        e.Values["ddlStartTime"] = ((DropDownList)((FormView)sender).FindControl("ddlStartTime")).SelectedItem; 
     e.Values["ddlEndTime"] = ((DropDownList)((FormView)sender).FindControl("ddlEndTime")).SelectedItem; 
     e.Values["ddlRoomName"] = ((DropDownList)((FormView)sender).FindControl("ddlRoomName")).SelectedItem; 
     e.Values["ddlJackNumber"] = ((DropDownList)((FormView)sender).FindControl("ddlJackNumber")).SelectedItem; 
     e.Values["ddlInternetType"] = ((DropDownList)((FormView)sender).FindControl("ddlInternetType")).SelectedItem; 
    } 

} 

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

Благодаря

enter image description here

Код для занесения DROPDOWNLIST

protected void formGroupInput_DataBound(object sender, EventArgs e) 
{ 


    if (formGroupInput.CurrentMode == FormViewMode.Insert) 
    { 
     DropDownList roomName = (DropDownList)(formGroupInput.Row.FindControl("ddlRoomName")); 
     roomName.DataSource = getrooms.FetchRooms(); 
     roomName.DataTextField = "RoomName"; 
     roomName.DataValueField = "intRoom"; 
     roomName.DataBind(); 

     ****Same concept for other 2 dropdownlist ****** 


    } 
} 

Page Load Я называю это

protected void Page_Load(object sender, EventArgs e) 
{ 

    DropDownList startTime = (DropDownList)(formGroupInput.Row.FindControl("ddlStartTime")); 


    if (startTime.Items.Count == 0) 
    { 
     startTime.Items.Add("12:00AM"); 
     startTime.Items.Add("12:30AM"); 
     for (int i = 1; i <= 11; i++) 
     { 
      startTime.Items.Add(i + ":00AM"); 
      startTime.Items.Add(i + ":15AM"); 
      startTime.Items.Add(i + ":30AM"); 
     } 

     startTime.Items.Add("12:00PM"); 
     startTime.Items.Add("12:30PM"); 
     for (int i = 1; i <= 11; i++) 
     { 
      startTime.Items.Add(i + ":00PM"); 
      startTime.Items.Add(i + ":15PM"); 
      startTime.Items.Add(i + ":30PM"); 
     } 
    } 


    DropDownList endTime = (DropDownList)(formGroupInput.Row.FindControl("ddlEndTime")); 

    if (endTime.Items.Count == 0) 
    { 
     Same As Above 
    } 
+0

Знаете ли вы, какой метод выбрасывает исключение? Можете ли вы опубликовать трассировку стека? –

+0

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

+0

Вы пытались поставить контрольные точки наверху и переходить через каждую из ваших функций formGroupInput_ItemInsert *? – tgolisch

ответ

0

Только для посетителей этого вопроса в будущем. Это происходит, если у вас есть параметр Int32, который связан, но не был установлен в formview, поэтому значение элемента управления является пустой строкой. Пустая строка вызывает ошибку синтаксического анализа для Int32. В вашем элементе управления ObjectDataSource вам нужно что-то вроде этого:

<InsertParameters> 
<asp:Parameter Name="MyParameterName" Type="Int32" ConvertEmptyStringToNull="true" /> 
</InsertParameters> 
Смежные вопросы