I have this piece of code below which checks whether a checkbox for a certain row is clicked or not and depending on whether it is clicked or not shows either a true or false value.
foreach (DataGridViewRow r in testGV.Rows)
{
DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)r.Cells["isSelected2"];
if (Convert.ToBoolean(cell.Value))
.....
.....
}
}
The problem I am having is that sometimes the if statement returns a null value for no apparent reason. It only happens when I start the program and press the start test button which ultimately moves the row from one gridview to another. Then it will have a timer which collects data and is represented in the row but the moment I press stop test the if statement shows a true which is good but the moment I let the timer run for the test the value of the if statement turns to null which is bad. Here is where I initialize the columns for each gridview and also how I add a row to the gridviews.
public DataGridViewCheckBoxColumn chk1 = new DataGridViewCheckBoxColumn();
public DataGridViewCheckBoxColumn chk2 = new DataGridViewCheckBoxColumn();
Created as class variables.
This is where I load the form.
private void Form2_Load(object sender, EventArgs e)
{
connectedGV.ColumnCount = 3;
connectedGV.Columns[0].Name = "serial";
connectedGV.Columns[0].ValueType = typeof(string);
connectedGV.Columns[0].HeaderText = "Serial Number";
connectedGV.Columns[1].Name = "mainboardfw";
connectedGV.Columns[1].ValueType = typeof(string);
connectedGV.Columns[1].HeaderText = "Firmware";
connectedGV.Columns[2].Name = "opticalfirmware";
connectedGV.Columns[2].ValueType = typeof(string);
connectedGV.Columns[2].HeaderText = "Optical Firmware";
chk1.HeaderText = "Selected";
chk1.Name = "isSelected1";
connectedGV.Columns.Add(chk1);
connectedGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
testGV.ColumnCount = 5;
testGV.Columns[0].Name = "serial";
testGV.Columns[0].ValueType = typeof(string);
testGV.Columns[0].HeaderText = "Serial Number";
testGV.Columns[1].Name = "mainboardfw";
testGV.Columns[1].ValueType = typeof(string);
testGV.Columns[1].HeaderText = "Firmware";
testGV.Columns[2].Name = "opticalfirmware";
testGV.Columns[2].ValueType = typeof(string);
testGV.Columns[2].HeaderText = "Optical Firmware";
testGV.Columns[3].Name = "datacount";
testGV.Columns[3].ValueType = typeof(string);
testGV.Columns[3].HeaderText = "Data Count";
testGV.Columns[4].Name = "startTime";
testGV.Columns[4].ValueType = typeof(string);
testGV.Columns[4].HeaderText = "StartTime";
chk2.HeaderText = "Selected";
chk2.Name = "isSelected2";
testGV.Columns.Add(chk2);
testGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
Rows added here to connectedGV.
public void UnitConnected(object sender, APData ap)
{
string[] row0 = { ap.DeviceSerial, ap.DeviceFirmware, ap.OpticalFirmware};
connectedGV.Invoke((MethodInvoker)delegate
{
connectedGV.Rows.Add(row0);
countBox1.Text = connectedGV.Rows.Count.ToString();
});
OutputBox.Invoke((MethodInvoker)delegate
{
OutputBox.AppendText("Unit " + ap.DeviceSerial + " connected" +
Environment.NewLine);
});
}
Finally row added to the second gridview where we are having issues.
public void OnBurnInStarted(APData ap)
{
connectedGV.Invoke((MethodInvoker)delegate
{
if (removeItemFromConnectedGrid(ap.DeviceSerial, connectedGV))
{
string[] row0 = { ap.DeviceSerial, ap.DeviceFirmware, ap.OpticalFirmware, "0", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), };
UnitsUnderTestGridView.Rows.Add(row0);
countBox1.Text = connectedGV.Rows.Count.ToString();
countBox2.Text = UnitsUnderTestGridView.Rows.Count.ToString();
}
});
OutputBox.Invoke((MethodInvoker)delegate
{
OutputBox.AppendText("Starting Burn-in on " + ap.DeviceSerial +
Environment.NewLine);
});
}
I ultimately wanted to have a bool value correspond to the checkbox which would be ap.isSelected but I do not know how to get it to bind to a checkbox. I suspect its the way I am adding rows which is causing a null to appear but when I stop the test it clearly works.
If someone could help me figure out why the checkbox appears to be null when the timer runs out that would be great!
What I have tried:
I have tried moving things around, adding a variable to the checkbox and even adding a whole nother column but nothing seems to work. I have also tried sneaking into the row declarations, ap.isSelected but that doesn't seem to do anything.