Hallo VBIBers,
Ik heb weer een uitdaging, oftwel ik zit vast.
Ik heb een server met een daarbij behorende cliënt.
De bedoeling is dat de server een logbestand uitleest en de laatste regel naar de clients stuurd.
Dit gedeelte lukt allemaal wel.
Ik sla alles op in een object welke wordt opgeslagen in een list of.
Ik wil alleen de laaste tien regels bij houden, dus ik dacht dat het wel handig was als ik de List of koppel aan de datasource van een DGV.
Maar hier gaat het fout, ik krijg wel regels in mijn DGV, maar deze zijn allemaal leeg. Het aantal regels komt ook overeen met het aantal records in mijn List of. Hoe kan dit?
Tijdens het debuggen zie ik dat de list wel gevuld wordt.
Aanmaken List en DGV
C Code:
BindingList LogList = new BindingList();
private Thread luister;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
luister = new Thread(listen);
luister.Start();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.Columns.Add("time", "Time");
dataGridView1.Columns.Add("ID", "ID");
dataGridView1.Columns.Add("type", "Type");
dataGridView1.Columns.Add("DSCS", "DSCS");
dataGridView1.Columns.Add("ver1", "Ver1");
dataGridView1.Columns.Add("ver2", "Ver2");
dataGridView1.Columns.Add("ok", "OK");
dataGridView1.Columns[0].DataPropertyName = "time";
dataGridView1.Columns[1].DataPropertyName = "ID";
dataGridView1.Columns[2].DataPropertyName = "type";
dataGridView1.Columns[3].DataPropertyName = "DSCS";
dataGridView1.Columns[4].DataPropertyName = "ver1";
dataGridView1.Columns[5].DataPropertyName = "ver2";
dataGridView1.Columns[6].DataPropertyName = "ok";
BindingList LogList = new BindingList();
//dataGridView1.DataSource = LogList;
}
Toevoegen aan List
C Code:
for (int i = 0; i < splitData.Length; i++)
{
DSCSlog logLine = new DSCSlog(splitData[i]);
addToList(logLine);
}
changeDataDisplay();
ChangeDisplay en AddlogLine:
C Code:
private void changeDataDisplay()
{
if (dataGridView1.InvokeRequired)
{
// This is a worker thread so delegate the task.
dataGridView1.Invoke(new ChangeDataDisplayDelegate(changeDataDisplay));
}
else
{
dataGridView1.DataSource = LogList;
}
}
private delegate void addToListDelegate(DSCSlog logLine);
private void addToList(DSCSlog logLine)
{
if (dataGridView1.InvokeRequired)
{
// This is a worker thread so delegate the task.
dataGridView1.Invoke(new addToListDelegate(addToList), logLine);
}
else
{
LogList.Add(logLine);
}
}
B.v.d. voor de hulp
Groeten,
Eviltwin









