ObjectDataSource выбирается до заполнения выпадающего списка данными

Я связываю свой DropDownList во время первой Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Function.LoopChangeControlMtText(this.Controls);

        BindProcessingDepartment();
        BindDropDownListYear();
        if (DropDownListProcessingDepartment.Items.Count > 0)
        {
            if (DropDownListYear.Items.Count > 0)
            {
                BindGridViewUploadedItemNoCommitment();
            }
        }
    }
}

private void BindDropDownListYear()
{
    MTConfig mtConfig = new MTConfig();
    DataTable mtCreatedYear = new DataTable();
    mtCreatedYear = mtConfig.getMtCreatedYear();
    if (mtCreatedYear == null)
    {
        Page.ClientScript.RegisterStartupScript(Page.GetType(), "alertFailProcessDeptBind", "alert('Failed to get " + ConfigurationManager.AppSettings["systemNameShortFormWithoutE"].Trim() + " created year.\\nPlease contact MIS.\\nContact info. at the bottom of the page.');", true);
    }
    else
    {
        DropDownListYear.DataSource = mtCreatedYear;
        DropDownListYear.DataMember = "MtCreatedYear";
        DropDownListYear.DataValueField = "MtCreatedYear";
        DropDownListYear.SelectedIndex = 0;
        DropDownListYear.DataBind();
    }
}

Но мой источник данных объекта выполняет выбор до того, как выпадающий список заполнится данными. SelectedValue ниже пусто при первом выборе.

protected void objectDataSourceUploadedItemWithoutCommitment_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
    try
    {
        e.InputParameters["CreatedYear"] = Convert.ToInt32(DropDownListYear.SelectedValue.ToString());
    }
    catch (Exception ex)
    {
        LogHandler.LogError(logger, ex);
        Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "Error occurred during objectDataSourceUploadedItemWithoutCommitment_Selecting!", true);
    }
}

Можно ли изменить порядок objectDataSourceUploadedItemWithoutCommitment_Selecting а также Page_Load?

Как еще я могу иметь дело с этим, кроме DropDownListYear.Items.Insert(0, new ListItem("Please select year", "0")) заставить пользователя выбрать год?

1 ответ

Вы можете сделать это на лицевой стороне, используя AppendDataBoundItems="True" имущество:

<asp:DropDownList ID="DropDownListYear" AppendDataBoundItems="True" runat="server" >
    <asp:ListItem>Please select year</asp:ListItem>
</asp:DropDownList>

Это автоматически добавит первый элемент с вашими другими элементами, заполненными из DataSource.

Другие вопросы по тегам