2011-05-05 139 views
0

我目前正在创建一个使用telerik控件的Gridview,它显示来自sql数据库的数据,我通过wcf ria中使用的域数据源显示数据(ADO.net实体模型等) 我想在我的radgrid上面添加一个自动填充框,键入名称和其他可匹配的条目也列出。如何将自动填充框绑定到数据库表列?

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

我使用silverlight 4,wcf ria,telerik控件。

请提供xaml和xaml.cs中的示例编码思想。

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

+0

自动完成Telerik控件还是使用工具包自动完成? – 2011-05-05 14:22:54

+0

他正在使用工具包自动完成功能。 [见这里](http://stackoverflow.com/questions/5871918/using-autocomplete-box-in-silverlight/5872254#5872254) – 2011-05-05 16:28:21

回答

0

作为一个例子......假设您有一个客户列表,您希望在您的自动完成框中显示他们的名字。此外,您的网格应显示所有客户,并且在自动完成框中选择名称时,将显示网格的选定项目。

你需要做的就是绑定RadGridView的SelectedItem属性AutoCompleteBox的&。我会做的是AutoCompleteBox绑定到一个名为SelectedName属性,比如:在“模式=双向”

<input:AutoCompleteBox ItemsSource="{Binding Names}" SelectedItem="{Binding SelectedName, 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

+0

我需要做一个客户类,或者我可以使用客户实体已经在我的数据库? – iti 2011-05-06 05:12:07

+0

那么我通常有客户端模型为我的每个数据库表(或更合适的EF实体)构建,所以我可以实现像IEditable和INotify之类的东西。 – 2011-05-06 05:25:16

+0

好吧,我仍然感到困惑,我的代码给出错误 – iti 2011-05-06 05:35:17

相关问题