首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# GridView -具有可空数据的组合框列

C# GridView -具有可空数据的组合框列
EN

Stack Overflow用户
提问于 2015-01-16 14:28:19
回答 1查看 601关注 0票数 1

我正在尝试创建一个RadGridView,它由对WCF的调用填充,该调用返回包含一些空值的查询。我需要这些值中的一个,一个描述“角色”的整数,它是通过combobox列访问的唯一可写字段。我需要让combobox在下拉列表中显示相同的4个选项,不管这个值是否不是,而是标记为一个字符串,该字符串不是查询结果的一部分。

所有其他列都是只读的,可以自动生成,但我想根据“角色”字段的值应用一些自定义格式。

我正在进行WCF调用并将RadGridView.ItemSource设置为代码隐藏中的结果。

代码语言:javascript
复制
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中,但它没有添加任何内容,而是返回一个空白网格。

代码语言:javascript
复制
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来完成它,并从那里更改DisplayMemberPath,但是由于我需要显示的字符串不在原始查询和ItemSource中,所以我没有什么可设置的。在表中,我得到整数值,但在下拉列表中没有任何选择。

代码语言:javascript
复制
<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>

最后,我需要用相同的查询来使用这个Grid,但是对于页面上大约15个不同网格中的不同内容类型。理想情况下,我希望创建某种模板并重用它。

我应该采取什么方法来处理这个组合框列?我尝试使用一个转换器(它调用一个WCF服务),但我刚刚得到整数,没有下拉选项。我需要列来显示实际值,我希望能够在代码隐藏的某个地方定义下拉选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-20 21:54:21

你很接近通过XAML来做这件事,这是我经常做的事情。您需要做的是使用ViewModel的ItemsSource属性将其绑定到GridViewComboBoxItem中的一个属性。为此,需要将对ViewModel的引用设置为StaticResource。

代码语言:javascript
复制
<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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27986131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档