Пользовательский элемент управления ASP.NET как параметр FilterParameter
Автор вопроса: StevenОтветов: 3
При добавлении параметров предложения WHERE в источник данных вы можете указать существующий элемент управления формы (текстовое поле, раскрывающийся список и т. Д.), Выбрав "Источник: элемент управления", а затем выбрав "ControlID" в следующем раскрывающемся списке.
Есть ли способ настроить пользовательский элемент управления так, чтобы он отображался в списке элементов управления?
OR
Как я могу использовать свойство пользовательского элемента управления в качестве параметра запроса?
Я не уверен, что вы можете сделать это с System.Web.UI.UserControl, но я смог сделать это с System.Web.UI.WebControls.WebControl.
Вы должны отметить свой класс WebControl как [ControlValueProperty("PropertyName")].
PropertyName - это имя свойства, значение которого будет использоваться в предложении where. Например, в случае TextBox это "Text", в случае DropDownList - "SelectedValue".
Я пробовал сделать это с помощью UserControl, но не смог заставить его работать, дам вам знать, если найду решение.
Ответ 2 · Daniel Dyson
Ваш элемент управления должен будет реализовать интерфейс IPostBackDataHandler, чтобы он мог "сообщать" выбранный индекс или значение серверу, когда ваша страница отправляет ответ. Интерфейс реализован как TextBox, так и DropDownList. Я не уверен, использует ли Visual Studio diaolg его, чтобы определить, отображать ли его в списке элементов управления, но попробовать стоит. Я все еще изучаю, как это работает, но я подумал, что опубликую это, чтобы вы разобрались с этим.
Ответ 3 · Raj Kaimal
Вы можете создать собственные параметры, например 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>
public int EmployeeID {
get {
return Convert.ToInt32(TextBox1.Text);
}
}
Где TextBox1 - это место, где пользователь вводит идентификатор сотрудника. Вы также можете использовать ViewState для хранения свойства EmployeeId на тот случай, если вы хотите сохранить его при обратной передаче (в зависимости от вашего сценария).