【问题标题】:How to bind a datagrid to a class in which one member is a list?如何将数据网格绑定到一个成员是列表的类?
【发布时间】:2015-12-02 14:24:36
【问题描述】:

我看过一些类似的帖子。 这里的区别是我不想手动设置所有列绑定。

所以我有课

 public class PartProgram
{
  public string Description { get; set; }
  public string Note { get; set; }    
  public string PartProgramFilename { get; set; }
  public List<String> LstBlades { get; set; }
}

我已通过以下方式将其绑定到 datagridView:

 dtgPPtab3.ItemsSource = olstPartPrograms;

在哪里

 public ObservableCollection<PartProgram> olstPartPrograms = new ObservableCollection<PartProgram>();

这几乎在任何地方都可以正常工作,结果如下图所示:

所以所有列都是正确的,但我希望将集合值更改为blade1、blade2等的最后一列。

【问题讨论】:

  • @Soner Gönül 只是为了理解。编辑是否将编程语言放在标题中是错误的,因为这是一个与 C# WPF 无关的一般问题?
  • 问题可能与 C# 和 WPF 有关,但通常不需要将标签放在标题中。你可以阅读Should questions include “tags” in their titles?

标签: c# list data-binding datagrid


【解决方案1】:

您必须使用 ItemsControl(DataGrid/ListView 等)来显示集合列内容。

例如;

<DataGridTemplateColumn>
   <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <DataGrid ItemsSource="{Binding LstBlades }"/>
            </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

【讨论】:

  • 我得到一个异常 Items collection must be empty before using ItemsSource.
  • 能否请您详细说明我在代码背后的特殊情况?
  • 它类似于stackoverflow.com/questions/1754608/…,但我不适合它在我的情况下工作,即仅在 column3 上工作以及如何格式化列表,如 str1、str2、...
  • @Patrick 如需进一步格式化,您可以在内部数据网格中使用 DataGridTemplateColumn。
【解决方案2】:

好的,谢谢大家的帮助,但我从http://www.wpf-tutorial.com/datagrid-control/details-row/找到了一个非常简单的解决方案

想象有一个类绑定到数据网格:

 ObservableCollection<User> users = new ObservableCollection<User>();
 List<String> lst = new List<string>();
 lst.Add("AAA");
 lst.Add("BBB");
 lst.Add("CCC");
 users.Add(new User() { Id = 1, Name = "John Doe", Str = lst });
 dg.ItemsSource = users;

如果我想要类中的详细信息,请添加访问者详细信息:

 public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<String> Str { get; set; }
    public string Details<--------------------------------
    {
        get
        {
            String locStr=string.Empty;
            foreach (var item in this.Str)
                locStr += item + ", ";
            return locStr;
        }
    }
}

这为拥有一个易于理解的列表版本提供了魔力。 所以结果是:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2016-04-30
    相关资源
    最近更新 更多