bondpuoq
@bondpuoq
Web-программист с недавних пор

Как перекинуть в UserControl событие, из вложенного в него DropDownList?

Добрый день всем!

Есть Control со следующей разметкой
<%@ Control Language="c#" CodeBehind="PickStatus.ascx.cs" AutoEventWireup="True" Inherits="BugNET.UserControls.PickStatus"  %>
<asp:DropDownList 
  id="dropStatus" 
  CssClass="form-control" 
  OnSelectedIndexChanged="dropStatus_OnSelectedIndexChanged" 
  Runat="Server">
	<asp:ListItem Value="0">-- Select Status --</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator 
   id="reqVal" 
   Visible="false" 
   ControlToValidate="dropStatus" 
   InitialValue="0" 
   Text="(required)" 
   ErrorMessage="Status is required"
   Runat="Server" 
   meta:resourcekey="reqVal" 
   CssClass="text-danger validation-error" />


Это вот CodeBehind:
public partial class PickStatus : System.Web.UI.UserControl
	{
        /// <summary>
        /// Gets or sets a value indicating whether [display default].
        /// </summary>
        /// <value><c>true</c> if [display default]; otherwise, <c>false</c>.</value>
        public bool DisplayDefault { get; set; }

        /// <summary>
        /// Gets the selected text.
        /// </summary>
        /// <value>The selected text.</value>
        public string SelectedText
        {
            get { return dropStatus.SelectedItem.Text; }
        }

       public bool AutoPostBack
       {
          set { dropStatus.AutoPostBack = value; }
       }
        /// <summary>
        /// Gets or sets the selected value.
        /// </summary>
        /// <value>The selected value.</value>
		public int SelectedValue 
		{
			get {return Int32.Parse(dropStatus.SelectedValue); }
			set 
			{
				try 
				{
					dropStatus.SelectedValue = value.ToString();
				} 
				catch {}
			}
		}

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="PickStatus"/> is enabled.
        /// </summary>
        /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
		public bool Enabled 
		{
			get { return dropStatus.Enabled; }
			set { dropStatus.Enabled = value; }
		}

        /// <summary>
        /// Gets or sets the data source.
        /// </summary>
        /// <value>The data source.</value>
        public List<Status> DataSource { get; set; }

        /// <summary>
        /// Binds a data source to the invoked server control and all its child controls.
        /// </summary>
		public override void DataBind() 
		{
			dropStatus.Items.Clear();
			dropStatus.DataSource = DataSource;
			dropStatus.DataTextField = "Name";
			dropStatus.DataValueField = "Id";
			dropStatus.DataBind();
			if (DisplayDefault)
                dropStatus.Items.Insert(0, new ListItem(GetLocalResourceObject("SelectStatus").ToString(), "0"));
		}

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="PickStatus"/> is required.
        /// </summary>
        /// <value><c>true</c> if required; otherwise, <c>false</c>.</value>
		public bool Required 
		{
			get { return reqVal.Visible; }
			set { reqVal.Visible = value; }
		}


       public void dropStatus_OnSelectedIndexChanged(object sender, EventArgs e)
       {
       }
	}
}


Подключаю его на страницу таким образом:
<%@ Register TagPrefix="it" TagName="PickStatus" Src="~/UserControls/PickStatus.ascx" %>
<it:PickStatus ID="DropStatus" AutoPostBack="True" runat="Server"  DisplayDefault="false" />


Проблема в том, что у него нет события обычного для DropDownList'a - OnSelectedIndexChanged (по крайней мере IntelliSense не показывает)

А мне оно нужно, чтобы например проверить внутри него индекс выбранного элемента и сделать что-то на странице, исходя из этого.

Как можно отнаследовать событие от DropDownList, того, который внутри UserControl'a?

В событиях разбираюсь не очень хорошо, понимаю, что когда мы на разметке пишем, например
<asp:DropDownList runat="server" OnSelectedIndexChanged="SomeEvent" />
мы таким образом вызываем метод virtual void OnSelectedIndexChanged() у которого внутри Handler, в который запихивается метод SomeEvent()?
  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@heartdevil
плыву как воздушный шарик
Привет.

У вас уже есть обработчик события
public void dropStatus_OnSelectedIndexChanged(object sender, EventArgs e)
       {
       }


Теперь вам надо вот так достать ваш объект

public void dropStatus_OnSelectedIndexChanged(object sender, EventArgs e)
       {
          DropDownList ddl = (DropDownList)sender;
          //Индекс доступен через ddl.SelectedIndex
       }


Для наглядности поставьте брейкпоинт на этой строчке DropDownList ddl = (DropDownList)sender; и проверьте, срабатывает ли у вас событие.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы