简体   繁体   English

如何将List <>绑定到dataGridview C#

[英]How to bind List<> to dataGridview C#

I am new to window application. 我是窗口应用程序的新手。
I have written a code to read files inside a folder and read it line by line and find some string and display its count to dataGridView. 我编写了一个代码来读取文件夹中的文件并逐行读取并找到一些字符串并将其计数显示给dataGridView。

I wanted to fill a dataGridview which is not working. 我想填充一个无效的dataGridview。
I have tried different ways over the internet but none of them are working. 我在互联网上尝试了不同的方法,但没有一种方法有效。

I know that I might be making a silly mistake. 我知道我可能犯了一个愚蠢的错误。
My code is as follow 我的代码如下

  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";
        //}
    }

Edit:- 编辑:-

I have followed some link for the same 我已经按照一些链接进行了相同的操作
How to bind list to dataGridView? 如何将列表绑定到dataGridView?
http://social.msdn.microsoft.com/Forums/eu/csharplanguage/thread/766c7b46-6431-4ec1-8e74-50f718c6606b http://social.msdn.microsoft.com/Forums/eu/csharplanguage/thread/766c7b46-6431-4ec1-8e74-50f718c6606b

Data binding only work with Set/Get Properties, not public field. 数据绑定仅适用于“设置/获取属性”,而不适用于公共字段。

Try to change your FileDetail like this : 尝试像这样更改FileDetail

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

if you want to auto generate columns of datagridview then you can use it as 如果要自动生成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; }
}

more you can use List as Datasource without Binding source as 您可以使用List作为数据源,而不使用Binding源

dataGridView1.DataSource = fileDetails.ToArray();

for more information you can check this link Bind List of Class objects as Datasource to DataGridView 有关更多信息,您可以检查此链接将Class对象的List作为Datasource绑定到DataGridView

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM