Пользовательский элемент управления ASP.NET как FilterParameter - PullRequest
2 голосов
/ 12 апреля 2010

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

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

OR

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

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

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

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

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

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

0 голосов
/ 01 мая 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 на тот случай, если вы захотите сохранить его после обратной передачи (в зависимости от вашего сценария).

0 голосов
/ 13 апреля 2010

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

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