Пользовательский элемент управления ASP.NET как параметр FilterParameter

При добавлении параметров предложения WHERE в источник данных вы можете указать существующий элемент управления формы (текстовое поле, раскрывающийся список и т. Д.), Выбрав «Источник: элемент управления», а затем выбрав «ControlID» в следующем раскрывающемся списке.

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

OR

Как я могу использовать свойство пользовательского элемента управления в качестве параметра запроса?


person Steven    schedule 12.04.2010    source источник


Ответы (3)


Я не уверен, что вы можете сделать это с System.Web.UI.UserControl, но я смог сделать это с System.Web.UI.WebControls.WebControl.

Вы должны отметить свой класс WebControl как [ControlValueProperty("PropertyName")].

PropertyName - это имя свойства, значение которого будет использоваться в предложении where. Например, в случае TextBox это «Text», в случае DropDownList - «SelectedValue».

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

person Vivek Athalye    schedule 05.05.2010
comment
Я преобразовал свой пользовательский элемент управления в веб-элемент управления, добавил свойство controlvalue, как описано, но идентификаторы веб-элемента управления по-прежнему отсутствуют в списке. Мысли? - person Steven; 06.05.2010
comment
Я не уверен, почему вы не получаете элемент управления в списке. Я создал отдельный проект, чтобы убедиться, что я ничего не пропустил, и мне удалось получить контроль в предложении where. Я загрузил свой код на mediafire.com/file/gm5wjjitjiw/Server Управление в Источник данных Где Clause_v2.zip Вы можете взглянуть на него. Я создал TestServerControl, который предоставляет свойство SearchString, которое используется в DataSource. PS: На веб-странице я добавил кнопки только для того, чтобы вернуть сообщение. Нет никакого кода как такового. HTH - person Vivek Athalye; 06.05.2010
comment
К вашему сведению ... Атрибут ControlValuePropertyAttribute применяется к элементу управления, чтобы указать его свойство по умолчанию, к которому объект ControlParameter привязывается во время выполнения. (ссылка: msdn.microsoft.com/en-us / library /, msdn. microsoft.com/en-us/library/) ControlValueProperty - используется параметрами источника данных для получения внутреннего значения элемента управления. (ref: weblogs.asp.net/leftslipper/archive/2007/02/15/) - person Vivek Athalye; 06.05.2010
comment
Я использовал ControlValuePropertyAttribute вместо ControlValueProperty, и он отлично работал. Спасибо! - person Steven; 06.05.2010

Ваш элемент управления должен будет реализовать интерфейс IPostBackDataHandler, чтобы он мог «сообщать» выбранный индекс или значение серверу, когда ваша страница отправляет ответ. Интерфейс реализован как TextBox, так и DropDownList. Я не уверен, использует ли Visual Studio diaolg его, чтобы определить, отображать ли его в списке элементов управления, но попробовать стоит. Я все еще изучаю, как это работает, но я подумал, что опубликую это, чтобы вы разобрались с этим.

person Daniel Dyson    schedule 13.04.2010

Вы можете создать собственные параметры, например http://fredrik.nsquared2.com/viewpost.aspx?PostID=355

но может быть проще сделать следующее:

Мы добавляем событие выбора в источник данных, которое будет извлекать общедоступное свойство из пользовательского элемента управления и устанавливать его в качестве параметра. Открытое свойство пользовательского элемента управления извлекает значение некоторого веб-элемента управления, например текстового поля, и представляет его как свойство.

Учитывая следующий SqlDataSource

<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource" 
  SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

  <SelectParameters>
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
  </SelectParameters>

 </asp:sqlDataSource>

Мы добавляем событие выбора вот так

protected void EmployeeDetailsSqlDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    e.Command.Parameters["@EmpID"].Value = MyUserControl.EmpID;
}

UserControl имеет такое свойство:

public int EmployeeID {
  get {
      return Convert.ToInt32(TextBox1.Text);
  }
}

Где TextBox1 - это место, где пользователь вводит идентификатор сотрудника. Вы также можете использовать ViewState для хранения свойства EmployeeId на тот случай, если вы хотите сохранить его при обратной передаче (в зависимости от вашего сценария).

person Raj Kaimal    schedule 01.05.2010