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