我对泛型非常陌生,被绑定(bind)到企业内部网 Web 应用程序的支持,该应用程序的升级过程受限于繁文缛节和缓慢变化的标准。因此,今天(谢天谢地!)我终于发现自己在升级到 .Net 3.5 并将所有代码转换为适当分层模型的过程中陷入困境。

我整个上午都在阅读关于泛型试图消化如何将下拉用户控件转换为从数据访问层中的类中获取其数据的适当业务对象的内容。

这里有一个非常简洁的问题,它详细说明了我有兴趣探索的内容: Set selected index in a Dropdownlist in usercontrol

然而,我希望看到的是 Travel_CarSizes.GetCarSizes() 在内部的实际外观以及 Travel_CarSizes 类是如何定义的。 (我很难使用 <T> 并且知道它应该发生在哪里。)

对于目前我自己的特定情况,我需要一个下拉用户控件来包含存储在数据库中的 SQL 表中并且其所选索引需要的位置方向(N、S、W、C/O、NW、SE 等)当表单数据存在时,能够由它碰巧位于的任何页面进行设置。

我已经开始在上面链接的示例中实现模型,但现在 没有使用泛型 因为我无法弄清楚:

下拉用户控件:

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();
    }
}

任何帮助将不胜感激!

最佳答案

public class StreetDirectional
{
    public string StreetSuffixPrefixAbbr { get; set; }

    public static IEnumerable<StreetDirectional> GetDirectionals ()
    {
        string sqlText = "SELECT StreetSuffixPrefixAbbr FROM common..tblStreetSuffixPrefix "
            + "ORDER BY StreetSuffixPrefixAbbr";

        SqlDataReader rdr = SqlClient.ExecuteFetchReturnDataReader( theConnectionString, CommandType.Text, sqlText);

        var list = new List<StreetDirectional>();

        while (rdr.Read())
        {
            var item = new StreetDirectional() { StreetSuffixPrefixAbbr = (string)rdr["StreetSuffixPrefixAbbr"] };
            list.Add(item);
        }

        return list;
    }

}

那么你可以这样做
ddlStreetPrefix.DataSource = StreetDirectional.GetDirectionals();

关于asp.net - 如何使用 DAL 在业务对象类定义中实现泛型以创建适当的用户控件下拉列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8015568/

10-12 07:35