【问题标题】:How to bind List<> to dataGridview C#如何将 List<> 绑定到 dataGridview C#
【发布时间】:2013-01-01 20:55:57
【问题描述】:

我是窗口应用程序的新手。
我编写了一个代码来读取文件夹内的文件并逐行读取并找到一些字符串并将其计数显示到 dataGridView。

我想填充一个不起作用的 dataGridview。
我在互联网上尝试了不同的方法,但都没有奏效。

我知道我可能会犯一个愚蠢的错误。
我的代码如下

  public class FileDetail
    {
        public  string filename;
        public int openConnectionCount;
        public int closeConnectionCount;
    }


    private void button1_Click(object sender, EventArgs e)
    {
        int openConnectionCount = 0;
        int closeConnectionCount = 0;
        List<FileDetail> fileDetails =new List<FileDetail>();
        foreach (string file in Directory.EnumerateFiles(textBox1.Text, "*.*", SearchOption.AllDirectories))
        {
            FileDetail fileDetail =new FileDetail();
            fileDetail.filename = file;
            // Read the file as one string.
            using (StreamReader myFile = new StreamReader(file))
            {

                string line;
                while ((line = myFile.ReadLine()) != null)
                {
                    if (line.Contains(" OpenConnection()")) openConnectionCount++;
                    if (line.Contains(" CloseConnection()")) closeConnectionCount++;
                }
                fileDetail.openConnectionCount = openConnectionCount;
                fileDetail.closeConnectionCount = closeConnectionCount;
            }
            fileDetails.Add(fileDetail);
            openConnectionCount = 0;
            closeConnectionCount = 0;
        }



        dataGridView1.AutoGenerateColumns = false;

        dataGridView1.Columns.Add("filename", "File Name");
        dataGridView1.Columns.Add("openConnectionCount", "Open Connection");
        dataGridView1.Columns.Add("closeConnectionCount", "close Connection");

        dataGridView1.Columns[0].DataPropertyName = "filename";
        dataGridView1.Columns[1].DataPropertyName = "openConnectionCount";
        dataGridView1.Columns[2].DataPropertyName = "closeConnectionCount";

        var filenamesList = new BindingList<FileDetail>(fileDetails); // <-- BindingList
        dataGridView1.DataSource = filenamesList;


        //dataGridView1.DataSource = fileDetails;




        //dataGridView1.b

        //foreach (var fileDetail in fileDetails)
        //{
        //    label1.Text += "FileName:=" + fileDetail.filename + "\t Open Connection:= " +
        //                   fileDetail.openConnectionCount + "\t close connection:=" +
        //                   fileDetail.closeConnectionCount+"\n";
        //}
    }

编辑:-

我已经关注了一些相同的链接
How to bind list to dataGridView?
http://social.msdn.microsoft.com/Forums/eu/csharplanguage/thread/766c7b46-6431-4ec1-8e74-50f718c6606b

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    数据绑定仅适用于设置/获取属性,不适用于公共字段。

    尝试像这样更改您的FileDetail

    public class FileDetail
    {
        public  string filename { get; set; }
        public int openConnectionCount { get; set; }
        public int closeConnectionCount { get; set; }
    }
    

    【讨论】:

    • 我没有注意到,+1 :D
    【解决方案2】:

    如果你想自动生成datagridview的列,那么你可以使用它

    public class FileDetail
    {
        [DisplayName("File Name")]    
        public  string filename { get; set; }
        [DisplayName("Open Connection")]    
        public int openConnectionCount { get; set; }
        [DisplayName("close Connection")]    
        public int closeConnectionCount { get; set; }
    }
    

    更多你可以使用列表作为数据源而无需绑定源

    dataGridView1.DataSource = fileDetails.ToArray();
    

    有关更多信息,您可以查看此链接 Bind List of Class objects as Datasource to DataGridView

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 2013-04-15
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多