Я очень плохо знаком с дженериками, будучи привязанным к поддержке корпоративного веб-приложения для интрасети, процесс обновления которого связан с бюрократизмом и медленно меняющимися стандартами.Следовательно, сегодня (к счастью!) Я наконец-то карабкаюсь во время нашего обновления до .Net 3.5 и перевожу весь код, который я могу, в правильно многоуровневую модель.
Я читал все утро о дженериках, пытающихся понять, какпреобразовать выпадающие пользовательские элементы управления в надлежащий бизнес-объект, который получает свои данные из класса на уровне доступа к данным.
Здесь есть совершенно лаконичный вопрос, который подробно описывает, что именно меня интересует в исследовании: Установитьвыбранный индекс в выпадающем списке в usercontrol .
Однако мне бы очень хотелось увидеть, как выглядит Travel_CarSizes.GetCarSizes()
внутри и как определяется класс Travel_CarSizes
.(Мне трудно с <T>
и я знаю, где это должно произойти.)
Для моих конкретных обстоятельств на данный момент мне нужен выпадающий пользовательский элемент управления, чтобы содержать указания направления (N, S, W,C / O, NW, SE и т. Д.), Которые хранятся в таблице SQL в БД и чей выбранный индекс должен быть в состоянии быть установленным на какой бы странице он ни находился, когда существуют данные формы.
Я начал реализовывать модель в примере по ссылке выше, но сейчас без использования Generics , потому что не могу понять:
Выпадающий пользовательский элемент управления:
public partial class DropDownStreetPrefix : System.Web.UI.UserControl
{
public string StreetPrefixValue
{
get { return ddlStreetPrefix.SelectedValue.ToString(); }
set
{
Bind();
ddlStreetPrefix.SelectedIndex = ddlStreetPrefix.Items.IndexOf(ddlStreetPrefix.Items.FindByValue(value));
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Bind();
}
}
private void Bind()
{
if (ddlStreetPrefix.Items.Count == 0)
{
SqlDataReader rdr = StreetDirectionals.GetDirectionals();
ddlStreetPrefix.DataSource = rdr;
ddlStreetPrefix.DataBind();
ddlStreetPrefix.DataValueField = "StreetSuffixPrefixAbbr";
ddlStreetPrefix.DataTextField = "StreetSuffixPrefixAbbr";
ListItem li = new ListItem("", "");
ddlStreetPrefix.Items.Insert(0, li);
ddlStreetPrefix.SelectedIndex = 0;
}
}
}
Класс StreetDirectionals
:
public class StreetDirectionals
{
private StreetDirectionals () { }
public static SqlDataReader GetDirectionals ()
{
string sqlText = "SELECT StreetSuffixPrefixAbbr FROM common..tblStreetSuffixPrefix " +
"ORDER BY StreetSuffixPrefixAbbr";
SqlDataReader rdr = SqlClient.ExecuteFetchReturnDataReader( theConnectionString, CommandType.Text, sqlText);
return rdr;
}
}
Я выделю взаимодействие с базой данных внутри класса StreetDirectionals
, как только смогу выяснить, как изменить его код, если я будупреобразовать метод Bind () из моего выпадающего пользовательского элемента управления в следующее:
private void Bind()
{
if (!IsPostBack)
{
**List<StreetDirectionals> sd = StreetDirectionals.GetDirectionals();**
ddlStreetPrefix.DataSource = sd;
ddlStreetPrefix.DataTextField = "StreetSuffixPrefixAbbr";
ddlStreetPrefix.DataValueField = "StreetSuffixPrefixAbbr";
ddlStreetPrefix.DataBind();
}
}
Любая помощь будет очень цениться!