如何将自动完成框绑定到数据库表列?

时间:2011-05-05 08:37:10

标签: silverlight service autocomplete ria radgrid

我目前正在使用telerik控件创建一个Gridview,它显示来自sql数据库的数据,我通过wcf ria中使用的域数据源显示这些数据。(ADO.net实体模型等) 我想在我的radgrid上面添加一个自动完成框,我在其中输入一个名称,并列出其他匹配条目。

当我点击该条目时,radgrid可能会显示包含该名称的整行。

我正在使用silverlight 4,wcf ria,telerik controls。

请在xaml和xaml.cs中提供示例编码构思。

我尝试访问telerik演示,但它们没有在我的系统上运行。

1 个答案:

答案 0 :(得分:0)

例如......假设您有一个客户列表,您希望在自动完成框中显示其名称。此外,您的网格应显示所有客户,并且在“自动完成”框中选择“名称”时,将显示网格的“选定”项。

您需要做的是绑定RadGridView&的SelectedItem属性。 AutoCompleteBox。我要做的是将AutoCompleteBox绑定到名为SelectedName的属性,如下所示:

<input:AutoCompleteBox ItemsSource="{Binding Names}" SelectedItem="{Binding SelectedName, Mode=TwoWay}" />

强调'Mode = TwoWay' - 这将提醒你的代码背后的UI已经改变。

在您的代码中,您将创建如下属性:

private string selectedName;
public string SelectedName
{
    get { return selectedName; }
    set 
    {
        if (value != null) 
        {
            var query = (from c in CustomersList
                        where (c.Name == value)
                        select c).FirstOrDefault();
            SelectedCustomer = (Customer)query;
            selectedName = value;
        }
    }
}

请注意,当您设置SelectedName时,您正在使用LINQ来确定选择了哪些客户。如果列表中有多个名称,那么这里的一个缺陷就是...这段代码只选择第一个。如果这是一个问题,您可能应该重新考虑您的架构..

然后对于你的网格,你会像这样绑定SelectedItem:

<telerik:RadGridView 
   ....
   SelectedItem={Binding SelectedCustomer, Mode=TwoWay"}
   ....
</telerik:RadGridView>

在您的代码中,您将创建此属性:

private Customers selectedCustomer;
public Customers SelectedCustomer 
{
    get { return selectedCustomer; }
    set { 
        selectedCustomer = value;
        MyGridView.SelectedItem = selectedCustomer;
    }
}

这样的事情应该让你开始。

SS