2

私はウィンドウアプリケーションに不慣れです。
フォルダ内のファイルを読み取り、1行ずつ読み取り、文字列を見つけてそのカウントを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";
        //}
    }

編集:-


同じ「リストをdataGridViewにバインドする方法」のリンクをたどりましたか?
http://social.msdn.microsoft.com/Forums/eu/csharplanguage/thread/766c7b46-6431-4ec1-8e74-50f718c6606b

4

2 に答える 2

8

データ バインディングは、パブリック フィールドではなく、プロパティの設定/取得でのみ機能します。

このように変更してみてくださいFileDetail

public class FileDetail
{
    public  string filename { get; set; }
    public int openConnectionCount { get; set; }
    public int closeConnectionCount { get; set; }
}
于 2013-01-18T07:19:03.300 に答える
1

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();

詳細については、このリンクを確認できます クラスオブジェクトのリストをデータソースとして DataGridView にバインドする

于 2013-12-21T05:10:38.843 に答える