Welcome to Devintelligence.com Sign in | Join | Help

.Net Adventures

In .Net we trust
Your Cheap Web Hosting Solution


Displaying large amount of data in DataGridView

DataGridView supports the special mode (Virtual Mode). The basic idea is that inside the control not stored any data.
In given below example of the primitive electronic table, the data stored in the hashtable.The electronic table has a large amount of cells. In this example the number of cells equals to 100000 lines * 100 columns = 10000000. Also the programm save and loads changed cells on the disk

 

Note: The SerializableDictionary can be found here

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Text; using System.Windows.Forms; using System.Xml.Serialization; namespace Devintelligence.Example { public partial class Form1 : Form { #region Fields public SerializableDictionary<string, int> data = new SerializableDictionary<string, int>(); private Font systemFont; private XmlSerializer serializer = new XmlSerializer(typeof(SerializableDictionary<string, int>)); #endregion public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { if (File.Exists(FilePath)) { // load from file & desirialize using (FileStream filestream = File.OpenRead(FilePath)) { data = serializer.Deserialize(filestream) as SerializableDictionary<string, int>; } } ((ISupportInitialize)dataGridView1).BeginInit(); dataGridView1.VirtualMode = true; dataGridView1.CellValueNeeded += new DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded); dataGridView1.CellValuePushed += new DataGridViewCellValueEventHandler(dataGridView1_CellValuePushed); // create columns for (int i = 0; i < 100 ; i++) { string name = string.Format("{0}", i); dataGridView1.Columns.Add(name, name); } dataGridView1.RowCount = 100000; systemFont = new Font(dataGridView1.Font,FontStyle.Bold); ((ISupportInitialize)dataGridView1).EndInit(); } /// <summary> /// Calculates the unique hash key based on row and column indexes. /// </summary> /// <param name="rowIndex">Index of the row.</param> /// <param name="columnIndex">Index of the column.</param> /// <returns></returns> private static string CalculateKey(int rowIndex, int columnIndex) { return string.Format("{0}_{1}", rowIndex, columnIndex); } /// <summary> /// Handles the CellValuePushed event of the dataGridView1 control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="T:System.Windows.Forms.DataGridViewCellValueEventArgs"/> /// instance containing the event data.</param> void dataGridView1_CellValuePushed(object sender, DataGridViewCellValueEventArgs e) { data[CalculateKey(e.RowIndex, e.ColumnIndex)] = Convert.ToInt32(e.Value); // mark changed cells dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.LightPink; dataGridView1[e.ColumnIndex, e.RowIndex].Style.Font = systemFont; } /// <summary> /// Handles the CellValueNeeded event of the dataGridView1 control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="T:System.Windows.Forms.DataGridViewCellValueEventArgs"/> /// instance containing the event data.</param> void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { int value; if (data.TryGetValue(CalculateKey(e.RowIndex, e.ColumnIndex), out value)) { e.Value = value; // mark changed cells dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.LightPink; dataGridView1[e.ColumnIndex, e.RowIndex].Style.Font = systemFont; } else { e.Value = e.ColumnIndex*e.RowIndex; } } private static string FilePath { get { // the data file will be saved in file named data.xml return Path.Combine(Application.StartupPath, "data.xml"); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // serialize & save entered data using (FileStream filestream = File.Open(FilePath, FileMode.Create)) { serializer.Serialize(filestream, data); } } } }
Posted: Sunday, February 18, 2007 10:23 PM by adventurer

Comments

DotNetKicks.com said:

You've been kicked (a good thing) - Trackback from DotNetKicks.com

# March 13, 2007 12:18 PM
New Comments to this post are disabled