Я довольно новичок в пользовательском контроле. До сих пор я нашел их весьма полезными для обработки большого количества повторяющихся полей ввода пользователя. Однако у меня возникла проблема с предварительным заполнением раскрывающегося списка в элементе управления. Я добавляю 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.
Я полагаю, что это довольно распространенная проблема, но мне еще предстоит найти решение. Любая помощь будет принята с благодарностью.