如何以编程方式访问数据绑定数据集以进行控制?

时间:2012-06-11 13:26:16

标签: c# asp.net data-binding webforms

我有一个DropDownList控件,通过SqlDataSource数据绑定,其查询返回3个字段(LabelValueActive) - 是否存在以编程方式访问数据绑定数据集以检查Active标志是真还是假的方法?

我知道这可以在数据绑定期间完成,但我需要在Active阶段检查PreRender标志,因为控件可能需要选择一个值Active=false如果加载已做出此选择的旧记录。 (在PreRender期间,我删除了所有Active=false项,除非它是我将DropDownList设置为的值。

我通过使用DataView填充SqlDataSource来完美地完成此操作。选择并比较/删除基于此的项目,但是为了每个控件第二次访问数据库两次,这似乎是低效的。

另外,我无法为所有控件编写一段可重用/通用代码,因为我的当前方法仅在SqlDataSource不需要任何SelectArguments时才有效。如果我可以直接访问数据绑定数据,这也可以绕过这个问题。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:2)

我认为您遇到的主要问题来自于使用SqlDataSource作为数据访问。 SqlDataSources易于设置并为您提供即时结果,但它们非常不灵活,需要跨页面重用。

我会创建一个从数据库中获取数据并将其存储在List或IEnumerable中的函数。如果数据在List中,那么您可以以编程方式访问它,并且验证更容易实现。

以下是使用实体框架访问数据库的示例

标记

<asp:DropDownList ID="ddlTest" runat="server"></asp>

代码背后

public List<Record> GetAllRecordsByUserName(string credentials)
{
    List<Record> recordList;
    using (CustomEntities context = new CustomEntities())
    {

        IQueryable<Record> recordQuery = from records in context.Records
                                              where records.UserName == credentials
                                              select records; 
        recordList = recordQuery.ToList<Record>();
    }
    return recordList;
}

public void ValidateAndBind(string username)
{
    List<Record> recordList = GetAllRecordsByUserName(username);

    // Do validation here

    ddlTest.DataSource = recordList;
    ddlTest.DataBind();
}

protected void Page_Load(object sender, EventArgs e)
{
    ValidateAndBind("test.username");
}

您可以使用您想要的任何数据访问方法,但以编程方式设置它允许您跨页面重复使用它。在上面的方法中,我在页面中为空间条件创建了它。实际上,您应该创建一个处理特定数据检索的类,通常称为数据访问层