The easiest way to bind a data grid with an array list (or any object container, for that matter) is to use Update Controls .NET. You can drop an UpdateGrid on your form and implement the GetItems event. This event just returns the array. Then implement GetCellValue to get the values to display. When the user changes a value, the control fires SetCellValue. Here's an example: private System.Collections.IEnumerable itemsGrid_GetItems() { return _order.Items; } private object itemsGrid_RowAdded() { return _order.NewItem(); } private void itemsGrid_RowDeleted(object tag) { _order.DeleteItem((Item)tag); } private UpdateControls.Forms.ColumnDefinitions itemsGrid_GetColumns() { return new UpdateControls.Forms.ColumnDefinitions(). Add("Name", typeof(string)). Add("Price", typeof(decimal)). Add("Quantity", typeof(int)). AddReadOnly("Total", typeof(decimal)); } private object itemsGrid_GetCellValue(object tag, int column) { Item item = (Item)tag; if (column == 0) return item.Name; else if (column == 1) return item.Price; else if (column == 2) return item.Quantity; else return item.Total; } private void itemsGrid_SetCellValue(object tag, int column, object value) { Item item = (Item)tag; if (column == 0) item.Name = (string)value; else if (column == 1) item.Price = (decimal)value; else if (column == 2) item.Quantity = (int)value; }