您的位置:首页 > 其它

How to Bind an ArrayList to a DataGrid

2006-03-17 14:06 344 查看

How to Bind an ArrayList to a DataGrid

More Information on installing the .Net Framework click here.
Download full Visual Studio C# .NET Examples from this Article.

Overview


Here is a technique for binding an arraylist of objects where the objects contain public property that can appear as columns in the datagrid. In this example, the object contains 2 public doubles, one named "RandomValue" and the other named "SqrtValue". To bind this arraylist to a datagrid, add a custom tablestyle that has a MappingName of "ArrayList", and then use the property names as the MappingName for each column.


Example





using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Akadia.DataGridArrayList
{
public class DataGridArrayList : System.Windows.Forms.Form
{
private System.Windows.Forms.DataGrid dataGrid1;
private ArrayList arrayList1;
private System.Windows.Forms.Button buttonAddNew;
private System.Windows.Forms.Button buttonDeleteCurrent;
private System.ComponentModel.Container components = null;

public DataGridArrayList()
{
InitializeComponent();
}

...
...

[STAThread]
static void Main()
{
Application.Run(new DataGridArrayList());
}

// Create and Bind ArrayList to the Datagrid when loading
private void DataGridArrayList_Load(object sender, System.EventArgs e)
{
CreateArrayList();
BindArrayListToGrid();
}

// Create a custom tablestyle and add two columnstyles
private void BindArrayListToGrid()
{
dataGrid1.DataSource = arrayList1;

DataGridTableStyle ts = new DataGridTableStyle();
ts.MappingName = "ArrayList";

int colwidth = (dataGrid1.ClientSize.Width
- ts.RowHeaderWidth
- SystemInformation.VerticalScrollBarWidth - 5) / 2;

// Create a column for the "RandomValue" property
// defined in the RandomNumber Class
DataGridTextBoxColumn cs = new DataGridTextBoxColumn();
cs.MappingName = "RandomValue"; // Public property name
cs.HeaderText = "Random Number";
cs.Format = "f4";
cs.Width = colwidth;
ts.GridColumnStyles.Add(cs);

// Create a column for the "SqrtValue" property
// defined in the RandomNumber Class
cs = new DataGridTextBoxColumn();
cs.MappingName = "SqrtValue"; // Public property name
cs.HeaderText = "Square Root";
cs.Format = "f4";
cs.Width = colwidth;
ts.GridColumnStyles.Add(cs);

// Add the custom tablestyle to the DataGrid
dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(ts);
}

private void CreateArrayList()
{
arrayList1 = new ArrayList();

// Add some random Numbers
Random r = new Random();
for (int i = 0; i < 20; ++i)
{
arrayList1.Add(new RandomNumber(r.NextDouble()));
}

}

// Create a struct or class that defines what you want in each row
// the different columns in the row must be public properties

public class RandomNumber
{
private double num;

// Constructor
public RandomNumber(double d)
{
num = d;
}

// Public Property "RandomValue" used
// as Column in the DataGrid
public double RandomValue
{
get{ return num; }
set{ num = value;}
}

// Public Property "SqrtValue" used
// as Column in the DataGrid
public double SqrtValue
{
get {return Math.Sqrt(this.num);}
}
}


// Add a new random Number to the ArrayList and
// then refresh the DataGrid
private void buttonAddNew_Click(object sender, System.EventArgs e)
{
Random r = new Random();
arrayList1.Add(new RandomNumber(r.NextDouble()));

// Refresh the Datagrid with the new random number
CurrencyManager cm =
(CurrencyManager) this.dataGrid1.BindingContext[arrayList1];
if (cm != null)
{
cm.Refresh();
}

}

// Delete current Entry from the ArrayList.
private void buttonDeleteCurrent_Click(object sender, System.EventArgs e)
{
// Get the current position due to not allow empty datagrid.
CurrencyManager cm =
(CurrencyManager) this.BindingContext[dataGrid1.DataSource];

if (cm.Count <= 1)
{
return; // Do not allow an empty DataGrid
}

// Place cursor on position up
int removeAt = cm.Position;
if (removeAt > 0)
{
cm.Position = removeAt - 1;
}

// Remove current Entry
arrayList1.RemoveAt(removeAt);

if (cm != null)
{
cm.Refresh();
}
}

// Select the entire row when the user clicks on a cell in the row
private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
System.Drawing.Point pt = new Point(e.X, e.Y);
DataGrid.HitTestInfo hti = dataGrid1.HitTest(pt);
if (hti.Type == DataGrid.HitTestType.Cell)
{
dataGrid1.CurrentCell = new DataGridCell(hti.Row, hti.Column);
dataGrid1.Select(hti.Row);
}
}
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: