2015-01-16 6 views
1

Я пытаюсь создать RadGridView, который заполняется вызовом WCF, который возвращает запрос, который включает в себя некоторые нулевые значения. Мне нужно для одного из этих значений, целое число, описывающее «Роли», как единственное записываемое поле, доступ к которому осуществляется через столбец combobox. Мне нужно, чтобы combobox отображал те же 4 варианта в раскрывающемся списке, независимо от того, является ли это значение, но помечено строкой, которая равна , а не, кроме результатов запроса.C# GridView - столбец Combobox с обнуляемыми данными

Все остальные столбцы доступны только для чтения и могут быть сгенерированы автоматически, но я хочу применить произвольное форматирование на основе значения поля «Роли».

Я делаю вызов WCF и устанавливаю RadGridView.ItemSource в результат позади кода.

private void ExpandGet(object sender, Telerik.Windows.RadRoutedEventArgs e) 
{ GetContent(4, CurrentUser.Id); } 

private void GetContent(int libType, int userId) 
{ 
    Services.Libraries.Do(d1 => Dispatcher.ExecuteSync(
     () => 
      { 
       var res = d1.EndGetRole(d1.BeginGetRole(userId, libType, null, null)); 
       return res; 
      }, 
     init:() => WaitContent1.IsBusy = true, 
     result: res => 
     { 
      Content1.ItemsSource = res; 
     }, 
     finalize: ok1 => WaitContent1.IsBusy = false)); 
} 

Я попытался создать отдельный список для столбца Роли использовать для его DisplayMember Пути, а также добавить, что в автогенерируемых DataGrid, но он ничего не добавляет и возвращает пустую сетку.

public class RIdName 
    { 
     public int RId { get; set; } 
     public string RName { get; set; } 
    }      

    public List<IdName> RItemsSource; 

    public void SetGridUp() 
    { 

     RItemsSource.Add(new IdName {RId = -1, RName = "None"}); 
     RItemsSource.Add(new IdName {RId = 0, RName = "User"}); 
     RItemsSource.Add(new IdName {RId = 1, RName = "Contributer"}); 
     RItemsSource.Add(new IdName {RId = 2, RName = "Manager"}); 

     GridViewComboBoxColumn column = new GridViewComboBoxColumn(); 
     column.DataMemberBinding = new Binding("Role"); 
     column.DisplayMemberPath = "Rname"; 
     column.Header = "My Column"; 
     column.UniqueName = "MyColumn"; 
     column.ItemsSource = RItemsSource; 
     Content1.AutoGenerateColumns = false; 
     Content1.Columns.Add(column); 
    } 

Я также попытался сделать это через XAML andchange в DisplayMemberPath оттуда, но так как строки, мне нужно, чтобы отобразить не в исходном запросе и ItemSource У меня нет ничего, чтобы установить его в положение. В таблице я получаю целочисленные значения, но в выпадающем списке нет выбора.

<telerik:RadGridView x:Name="Content1" 
    ItemsSource="{Binding}" 
    AutoGenerateColumns="False" 
    CanUserDeleteRows="False" 
    CanUserInsertRows="False"> 
<telerik:RadGridView.Columns> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding LibraryName}"  UniqueName="Name" /> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding Per}" UniqueName="Per" /> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding By}" UniqueName="By" /> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding On}" UniqueName="On" IsReadOnly="True" /> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding Role} DisplayMemberBinding="IdName" UniqueName="Role" /> 
</telerik:RadGridView.Columns> 
</telerik:RadGridView> 

Наконец, мне нужно использовать эту сетку с тем же запросом, но и для различных типов контента в около 15 различных сеток на этой странице. В идеале я бы хотел создать какой-то шаблон и повторно использовать его.

Какой подход следует использовать для работы с этим столбцом combobox? Я попытался использовать конвертер (который вызывает службу WCF), но я только что вернул целые числа и не выбрал выпадающий список. Мне нужен столбец, чтобы показать фактические значения, и я хочу, чтобы определить варианты выпадающего списка где-то в коде.

ответ

0

Вы близко пытаетесь сделать это через XAML, это то, что я часто делаю. Что вам нужно сделать, это привязать его к свойству в ViewModel, используя свойство ItemsSource объекта GridViewComboBoxItem. Для этого вам нужно установить ссылку на ViewModel как StaticResource.

<UserControl.Resources> 
    <local:MainPageViewModel x:Key="mainPageViewModel" /> 
</UserControl.Resources> 
... 
<telerik:GridViewComboBoxColumn Header="Role" 
     DataMemberBinding="{Binding RID}" 
     ItemsSource="{Binding Path=RItemSource, Source={StaticResource mainPageViewModel}}" 
     DisplayMemberPath="RName" 
     SelectedValueMemberPath="RID" /> 

При необходимости вы можете найти здесь дополнительную информацию. http://docs.telerik.com/devtools/silverlight/controls/radgridview/troubleshooting/blank-cells

+0

Я так расстроен этим, что оставил его. Вернулись к нему несколько месяцев спустя, и эта ссылка поможет мне решить эту проблему. Я не использую модель представления на этих страницах, просто традиционный код, но назначая ItemSource в коде позади и оставляя XAML как «code' ItemsSource =« {Binding} »,« code' сделал трюк. Спасибо Митчелл. –