【问题标题】:can't get data from List<> to populate data grid view无法从 List<> 获取数据以填充数据网格视图
【发布时间】:2017-01-24 12:02:55
【问题描述】:

从示例来看,这似乎应该非常简单,但由于某种原因,我无法从 List 获取数据来填充数据网格视图。我创建了一个包含 3 个字段的类,创建了一个类列表并将该列表分配给 DGV 的 DataSource 属性。

列表已正确填充信息,DGV 显示正确的行数,但所有文本框均为空白。有人可以告诉我有什么问题吗?

List<clsCHPChassis> myList = new List<clsCHPChassis>();

clsCHPChassis chassis1 = new clsCHPChassis("Rear Port", "Management", "192.168.1.1");
clsCHPChassis chassis2 = new clsCHPChassis("Front USB", "Local", "10.10.10.1");

myList.Add(chassis1);
myList.Add(chassis2);

dgv.DataSource = myList;

clsCHPChassis 定义:

public class clsCHPChassis 
{
    public string Site = string.Empty;
    public string ChassisName = string.Empty;
    public string IP = string.Empty;

    public clsCHPChassis(string newSite, string newChassisName, string newIP)
    {
        Site = newSite;
        ChassisName = newChassisName;
        IP = newIP;
    }
}

【问题讨论】:

  • AutoGenerateColumns 设置为 true? clsCHPChassis 中的数据可以通过公共属性查看吗?
  • 请提供 clsCHPChassis 的类定义
  • Winforms 还是 Webforms?
  • 分配数据源后调用DataBind方法
  • 尝试将 dgv.DataSource 设置为 null,然后设置为 myList。仅分配值不会强制 RePaint() 方法更新控件。它将第一次工作而不设置 null 但不是更新。

标签: c# list datagridview


【解决方案1】:

只有公共属性是数据绑定的:

public class clsCHPChassis {
    public string Site { get; set; }
    public string ChassisName { get; set; }
    public string IP { get; set; }
}

【讨论】:

  • 斯莱,你成功了!我没有将 clsCHPChassis 数据集作为属性。它现在完美运行!非常感谢!
【解决方案2】:

列表本身不足以设置为数据源。你必须同时使用BindingList&lt;T&gt;BindingSourse

另一个简单的解决方案是使用 DataTable 作为 DataSourse

 DataTable table = new DataTable("Table");
 table.Columns.Add("Site", typeof(string));
 table.Columns.Add("ChassisName", typeof(string));
 table.Columns.Add("IP", typeof(string)); 

 table.Rows.Add("Rear Port", "Management", "192.168.1.1");
 table.Rows.Add("Front USB", "Local", "10.10.10.1");

 dgv.DataSource = table;

【讨论】:

  • 这是 clsCHPChassis 定义。
  • 公共类 clsCHPChassis { 公共字符串站点 = string.Empty;公共字符串 ChassisName = string.Empty;公共字符串 IP = string.Empty;公共 clsCHPChassis(字符串 newSite,字符串 newChassisName,字符串 newIP){ 站点 = newSite;机箱名称 = 新机箱名称; IP = 新IP; } }
  • Winforms 是平台。我没有 dataBind 选项
  • 如果我设置断点并探测 myList,我可以看到列表中的属性值。
  • 我不清楚您的要求。我猜您有一个带有 DataGridViewTextBoxColumn 的数据网格视图,并且您想从数据源中填充文本框?对吗?
【解决方案3】:

Slai 能够解决这个问题。他回答说只有类的属性是数据绑定的,这就是解决方案。将类定义中的3个字段更改为属性修复它!

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多