0

如果我在这里遗漏了一些明显的东西,我深表歉意......

我正在尝试自定义一种方法来创建一个 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();
    }
4

2 回答 2

1

没有内置的方法。你有一些选择:

于 2013-02-05T21:58:19.347 回答
1

您是否尝试this.UniqueName在每个员工上调用指定的方法,并查看结果是否包含文本?是这样的,你可以使用反射。

如果您确定那o是 a RadComboBox,那么它也可以这样传递。

private void list_ItemsRequested(RadComboBox o, RadComboBoxItemsRequestedEventArgs e)
{
    o.DataTextField = this.DataField;
    o.DataValueField = this.DataField;

    PropertyInfo property = typeof(EmployeeDTO).GetProperty(this.UniqueName);
    var employees = from emp in EmployeeBL.GetAllEmployees()
                    where ((IQueryable<string>)(property.GetValue(emp))).Contains(e.Text)
                    select emp;
    o.DataSource = employees;

    o.DataBind();
}
于 2013-02-05T21:58:54.177 回答