开发者

C#: Update datagrid

I have a C# application with a datagrid in windows form. I need to monitor a directory (am using FileSystemWatcher) and refresh the datagrid with li开发者_运维问答st of files in the directory. I am not sure how I can set up the interface to do so? Calling the monitorDirectory() from the windows-form Load() does not seem to work as Load is called only once in the application.

Thanks


You could update your grid within the OnChanged or OnRenamed event handlers of your FileSystemWatcher.

The example at the link below is handling the events within a Console application. MSDN FileSystemWatcher Class


Detecting File Changes with FileSystemWatcher has a good example of how to use the FileSystemWatcher


You can listen to events from the FileSystemWatcher object. The MSDN page posts some recommendations on how to do this.

Essentially, right before calling MonitorDirectory(), you should subscribe to the Changed, Created, Deleted, and Renamed events of your FileSystemWatcher.


Full Code

Add a Form1 to your project

Replace Form1.Designer.cs with

namespace Test
{
partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.dataGridView1 = new System.Windows.Forms.DataGridView();
        this.fileSystemWatcher1 = new System.IO.FileSystemWatcher();
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
        ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit();
        this.SuspendLayout();
        // 
        // dataGridView1
        // 
        this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dataGridView1.Location = new System.Drawing.Point(13, 13);
        this.dataGridView1.Name = "dataGridView1";
        this.dataGridView1.Size = new System.Drawing.Size(240, 150);
        this.dataGridView1.TabIndex = 0;
        // 
        // fileSystemWatcher1
        // 
        this.fileSystemWatcher1.EnableRaisingEvents = true;
        this.fileSystemWatcher1.Path = "c:\\Temp";
        this.fileSystemWatcher1.SynchronizingObject = this;
        this.fileSystemWatcher1.Changed += new System.IO.FileSystemEventHandler(this.fileSystemWatcher1_CreatedDeletedChanged);
        this.fileSystemWatcher1.Created += new System.IO.FileSystemEventHandler(this.fileSystemWatcher1_CreatedDeletedChanged);
        this.fileSystemWatcher1.Deleted += new System.IO.FileSystemEventHandler(this.fileSystemWatcher1_CreatedDeletedChanged);
        this.fileSystemWatcher1.Renamed += new System.IO.RenamedEventHandler(this.fileSystemWatcher1_Renamed);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(370, 301);
        this.Controls.Add(this.dataGridView1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
        ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).EndInit();
        this.ResumeLayout(false);

    }

    #endregion

    private System.Windows.Forms.DataGridView dataGridView1;
    private System.IO.FileSystemWatcher fileSystemWatcher1;
}
}

Replace Form1.cs with

using System;
using System.IO;
using System.Windows.Forms;

namespace Test
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private void PopulateGrid()
    {
        DirectoryInfo dir = new DirectoryInfo(fileSystemWatcher1.Path);

        dataGridView1.DataSource = dir.GetFiles();
    }


    private void fileSystemWatcher1_CreatedDeletedChanged(object sender, FileSystemEventArgs e)
    {
        PopulateGrid();
    }



    private void fileSystemWatcher1_Renamed(object sender, RenamedEventArgs e)
    {
        PopulateGrid();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        PopulateGrid();
    }
}
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜