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

C# 如何以编程方式访问数据绑定数据集以进行控制?,c#,asp.net,data-binding,webforms,C#,Asp.net,Data Binding,Webforms,我有一个DropDownList控件,该控件通过SqlDataSource进行数据绑定,其查询返回3个字段(Label、Value和Active)-是否有方法通过编程访问数据绑定数据集,以检查Active标志是否正确 我知道这可以在数据绑定期间完成,但我需要在PreRender阶段检查Active标志,因为如果在进行此选择的地方加载旧记录,控件可能需要选择Active=false的值。(在PreRender期间,我将删除所有Active=false项,除非我将DropDownList设置为该值)

我有一个
DropDownList
控件,该控件通过
SqlDataSource
进行数据绑定,其查询返回3个字段(
Label
Value
Active
)-是否有方法通过编程访问数据绑定数据集,以检查
Active
标志是否正确

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

通过使用
SqlDataSource
填充
DataView
,我可以很好地实现这一点。在此基础上选择并比较/删除项目,但对每个控件重复两次数据库以获取此信息似乎效率低下

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


任何建议都将不胜感激

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

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

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

加价

<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");
}
public List GetAllRecordsByUserName(字符串凭据)
{
列表记录列表;
使用(CustomEntities上下文=新CustomEntities())
{
IQueryable recordQuery=来自context.records中的记录
其中records.UserName==凭证
选择记录;
recordList=recordQuery.ToList();
}
返回记录列表;
}
public void ValidateAndBind(字符串用户名)
{
List recordList=GetAllRecordsByUserName(用户名);
//在这里进行验证
ddlTest.DataSource=记录列表;
ddlTest.DataBind();
}
受保护的无效页面加载(对象发送方、事件参数e)
{
ValidateAndBind(“test.username”);
}

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

以编程方式设置控件的数据源比使用SqlDataSource灵活得多。