IList Collection data toevoegen aan een ListView control via Reflection
IList Collection data toevoegen aan een ListView control via Reflection
Met de onderstaande code is het mogelijk om op eenvoudige wijze data toe te voegen aan een ListView control. De functie FillListView kan de data van een willekeurige Collection (IList interface) met Members van één bepaald type object toevoegen aan het control. Door gebruik te maken van Reflection wordt bepaald welke properties er aanwezig zijn in een Collection Member object.
Stap 1 - Nieuw project
Open een nieuw C# Windows Application project en voeg een ListView control (ListView1) toe aan Form1.
Stap 2 – FillListView
Voeg de volgende code toe aan Form1
private void Form1_Load(object sender, System.EventArgs e)
{
ArrayList dataSource = new ArrayList();
dataSource.Add(new Person("Jansen","","Henk"));
dataSource.Add(new Person("Vries","de","Jan"));
dataSource.Add(new Person("Puk","","Pietje"));
dataSource.Add(new Person("Mast","van der","Tineke"));
dataSource.Add(new Person("Hage","ten","Dirk"));
FillListView(dataSource, this.listView1);
}
public static void FillListView(IList dataSource, ListView lv)
{
ListViewItem lvItem;
int countMembers = dataSource.Count;
System.Type sourceMemberType;
System.Reflection.PropertyInfo[] propInfoArray;
int colCount;
System.Reflection.PropertyInfo propInfo;
if (countMembers == 0)
return;
// Define ListView
lv.View = System.Windows.Forms.View.Details;
lv.Items.Clear();
lv.Columns.Clear();
lv.HeaderStyle = ColumnHeaderStyle.Clickable;
sourceMemberType = dataSource[0].GetType();
propInfoArray = sourceMemberType.GetProperties();
colCount = propInfoArray.Length;
// Define columns
try
{
for (int col = 0; col < colCount;col++)
{
propInfo = propInfoArray[col];
lv.Columns.Add(propInfo.Name, 100, HorizontalAlignment.Left);
}
}
catch (Exception e)
{
Debug.WriteLine("FillListView - Error: " + e.Message);
}
// Fill ListView
try
{
lv.BeginUpdate();
for (int row = 0; row < countMembers; row++)
{
for (int col = 0; col < colCount; col++)
{
propInfo = propInfoArray[col];
String itemValue = (String)propInfo.GetValue(dataSource[row], null);
if (col == 0)
lvItem = lv.Items.Add(itemValue);
else
lv.Items[row].SubItems.Add(itemValue);
}
}
}
catch (Exception e)
{Debug.WriteLine("FillListView - Error: " + e.Message);}
finally
{lv.EndUpdate();}
}
Stap 3 – Voorbeeld class Person
Voeg de volgende code toe aan het project
public class Person : System.Object
{
private String _lastName;
private String _middleName;
private String _firstName;
public Person(string lastName, string middleName, string firstName)
{
_lastName = lastName;
_middleName = middleName;
_firstName = firstName;
}
public string LastName {set{_lastName = value;} get{return _lastName;}}
public string MiddleName {set{_middleName = value;} get{return _middleName;}}
public string FirstName {set{_firstName = value;} get{return _firstName;}}
}
Een andere maar meer complexere manier om data toe te voegen is via Data Binding. Op de MSDN site staat een goed voorbeeld hiervan. In het artikel ‘Creating a Data Bound ListView Control’ staat een goede beschrijving van het implementeren van Data Binding in een ListView control. Ga naar http://msdn.microsoft.com/library/en-us/dnadvnet/html/vbnet08262002.asp voor het volledige artikel en source code (VB.NET).
|
|
|