使用C#的Asp.net Formview

时间:2013-03-12 19:19:18

标签: c# asp.net formview

我有一个绑定到objectdatasource的formview。 objectdatasource从列表集合中获取其值。为了实现级联下拉列表,我必须为dropdownlist切换几个文本框控件。这些值填充得很好,级联下拉列表工作得很好但是在插入时我得到了这个恼人的无用信息

“索引超出了数组的范围。”所以我一直试图解决这个问题并且不能。

假设是我的下拉列表导致问题,我尝试将此代码添加到后面的代码中,因为我手动绑定它们,因此它们没有Text ='<%#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

填充下拉列表的代码

  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 ******


    }
}

页面加载我称之为

 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
    }

1 个答案:

答案 0 :(得分:0)

将来访问此问题的访问者。如果您有一个绑定但尚未在窗体视图中设置的Int32参数,则会发生这种情况,因此控件的值为空字符串。空字符串导致Int32的解析错误。在ObjectDataSource控件中,你需要这样的东西:

<InsertParameters>
<asp:Parameter Name="MyParameterName" Type="Int32" ConvertEmptyStringToNull="true" />
</InsertParameters>