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灵活得多。