Пользовательский контроль привязки данных - ASP.NET - PullRequest
0 голосов
/ 13 апреля 2011

Я разрабатываю "Адресный" пользовательский элемент управления.Он содержит 2 dropDowns (страны и города) и 2 текстовых поля (улица и здание).Второй dropDown (Города) зависит от первого выбранного dropDown Страны.

<div>Country</div>
   <div> <asp:DropDownList runat="server" ID="ddlCountry" DataTextField="Name" 
           DataValueField="Id" DataSource="<%#Facade.Addresses.GetCountries() %>" 
           AutoPostBack="true"   onselectedindexchanged="ddlCountry_SelectedIndexChanged" /></div>
</div>


<div>
<div>City</div>
<div>
  <asp:DropDownList runat="server" ID="ddlCity" DataTextField="Name" 
        DataValueField="Name"  />
</div>
</div>


<div>
<div>Street</div>
    <div><uc:TextBox ID="txtStreet" Text="<%#Address.Street %>" runat="server"/></div>
</div>


<div>
<div>House</div>
    <div> <uc:TextBox ID="txtHouse" Text="<%#Address.House%>" runat="server"/></div>
</div>



 public partial class AddressControl : UserControl
    {


        protected void Page_Init(object sender, EventArgs e)
        {
           ddlCountry.DataBind();
           BindCity(int.Parse(ddlCountry.SelectedValue));

        }


 public BEAddress Address
        {
            get
            {
                return new BEAddress
                {
                    Country = ddlCountry.SelectedItem.Text,
                    City = ddlCity.SelectedItem.Text,
                    Street = txtStreet.Text,
                    House= txtHouse.Text
                };


            }
            set
            {


                BindCity(int.Parse(ddlCountry.Items.FindByText(value.Country).Value));

                var a = ddlCity.Items.FindByText(value.Country);
                if (a !=null)
                     a.Selected = true;



                txtStreet.Text = value.Street;
                txtHouse.Text = value.House;
            }

        }

        protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e) {
            BindCity(int.Parse(ddlCountry.SelectedValue));
        }



        private void BindCity(int countryId) {

            ddlCity.DataSource = Facade.Addresses.GetCities(countryId);
            ddlCity.DataBind();
        }
}

Использование

ucAddress.Address = StoreDataSource.Address;

DropDown "Города" не содержит правильных значений при использовании setter (ucAddress.Address = StoreDataSource.Address).

Как изменить код, чтобы заставить этот элемент управления работать должным образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...