Установить выбранный индекс в выпадающем списке в usercontrol - PullRequest
0 голосов
/ 11 ноября 2010

Я довольно новичок в пользовательском контроле. До сих пор я нашел их весьма полезными для обработки большого количества повторяющихся полей ввода пользователя. Однако у меня возникла проблема с предварительным заполнением раскрывающегося списка в элементе управления. Я добавляю ddl на свою страницу ascx, затем связываю ddl и выставляю его:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<Travel_CarSize> tc = Travel_CarSizes.GetCarSizes();
        ddlCarSize.DataSource = tc;
        ddlCarSize.DataTextField = "CarSize";
        ddlCarSize.DataValueField = "CarSizeID";
        ddlCarSize.DataBind();
    }
}

public string CarSize
{
    get { return ddlCarSize.SelectedValue.ToString(); }
    set { ddlCarSize.SelectedIndex = ddlCarSize.Items.IndexOf(ddlCarSize.Items.FindByValue(value)); }
}

Однако, когда я программно пытаюсь установить выбор для ddl в элементе управления, я всегда заканчиваю тем, что устанавливал его, ТО затем связывая его. В моем файле aspx.cs я установил:

CarControl1.CarSize = "3";

Программа предназначена для отображения пустого пользовательского элемента управления (с ddl с привязкой к базе данных) и вида сетки. Пользователь выбирает запись сетки, и пользовательский контроль заполняется данными. Таким образом, ddl связывается с самого начала, а затем происходят события, которые приводят к «предварительно выбранному» ddl.

Когда это не дало мне результата, который я искал, я ставил точку останова на if (! IsPostBack), ddlCarSize.DataBind (); и набор {}. Я запускаю программу, она связывает мой ddl, и я делаю выбор в сетке. Когда я щелкаю по select, я обнаружил, что он попадает в if (! IsPostBack) в usercontrol и говорит: «О, это обратный вызов, не входите в if». затем он попадает в набор {}, но теперь ddl пуст. Затем он снова запускает if (! IsPostBack) и по какой-то причине теперь говорит, что это не обратная передача, и повторно связывает ddl.

Я полагаю, что это довольно распространенная проблема, но мне еще предстоит найти решение. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 11 ноября 2010
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Bind()
    }
}

public Bind()
{
    if (ddlCarSize.Items.Count == 0)
    {
        List<Travel_CarSize> tc = Travel_CarSizes.GetCarSizes();
        ddlCarSize.DataSource = tc;
        ddlCarSize.DataTextField = "CarSize";
        ddlCarSize.DataValueField = "CarSizeID";
        ddlCarSize.DataBind();
    }
}

public string CarSize
{
    get { return ddlCarSize.SelectedValue.ToString(); }
    set 
    {
        Bind();
        ddlCarSize.SelectedIndex = ddlCarSize.Items.IndexOf(ddlCarSize.Items.FindByValue(value)); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...