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

2

При добавлении параметров WHERE-предложения в DataSource вы можете указать существующий элемент управления формой (текстовое поле, выпадающее меню и т.д.), выбрав "Source: Control", а затем выбрав "ControlID" из следующего раскрывающегося списка.

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

ИЛИ

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

Теги:
user-controls

3 ответа

2
Лучший ответ

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

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

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

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

  • 0
    Я преобразовал свой usercontrol в веб-элемент управления, добавил свойство controlvalue, как описано, но идентификаторов web-control по-прежнему нет в списке. Мысли?
  • 0
    Я не уверен, почему вы не получаете контроль в списке. Я создал отдельный проект, чтобы убедиться, что ничего не пропустил, и я смог получить контроль в предложении where. Я загрузил свой код @ mediafire.com/file/gm5wjjitjiw/Server Control в источник данных, где Clause_v2.zip Вы можете посмотреть на него. Я создал TestServerControl, который предоставляет свойство SearchString, которое используется в DataSource. PS: На веб-странице я добавил кнопки только для того, чтобы вызывать пост обратно. Там нет кода позади как таковой. НТН
Показать ещё 2 комментария
0

Вы можете создать настраиваемые параметры, например 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 - это место, где пользователь вводит идентификатор employeeID. Вы также можете использовать ViewState для хранения свойства EmployeeId в случае, если вы хотите сохранить обратную передачу (в зависимости от вашего сценария).

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню