如果我在这里遗漏了一些明显的东西,我深表歉意......
我正在尝试自定义一种方法来创建一个 RadComboBox 过滤器,该过滤器可以根据用户类型进行调整(基于 Telerik 演示)。我正在使用业务逻辑层来拉入我的数据源,然后我尝试使用 linq 来选择组合框 OnItemsRequested 的值,具体取决于哪个组合框发出了请求。我正在尝试根据发出请求的 GridColumn 过滤器设置“where”子句中的参数。
这是我填写列表的代码:
private void list_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
{
((RadComboBox)o).DataTextField = this.DataField;
((RadComboBox)o).DataValueField = this.DataField;
var employees = from emp in EmployeeBL.GetAllEmployees()
where emp.(this.UniqueName).Contains(e.Text)
select emp;
((RadComboBox)o).DataSource = employees;
((RadComboBox)o).DataBind();
}
我是否需要将 UniqueName 作为我的数据对象 (EmployeeDTO) 中的参数?
谢谢。
更新:: 感谢反馈,我在填充组合框列表方面取得了一些成功。但是,我认为我的 linq 声明中仍然存在错误。该列表是第一次构建的,但是,当我尝试进行“StartsWith”比较时,页面会抛出一个错误,指出数据源不包含 datarows,即使我确实输入了一个“可查找”字符串。
这就是我现在所拥有的。
private void list_ItemsRequested(RadComboBox o, RadComboBoxItemsRequestedEventArgs e)
{
o.DataTextField = this.DataField;
o.DataValueField = this.DataField;
DataTable dt = EmployeeBL.GetAllEmployees().AsDataTable();
IEnumerable<DataRow> query =
from emp in dt.AsEnumerable()
where emp.Field<String>(this.UniqueName).StartsWith(e.Text)
select emp;
DataTable boundTable = query.CopyToDataTable<DataRow>();
o.DataSource = boundTable;
o.DataBind();
}