I have an excel validation program that imports excel files and places the values on a DataGridView
. I want to validate columns January to December which I already did but I want to validate them by their columns name because the code I'm using is static and would only validate from Column Index 4 above (January is Column Index 4).
Here is an image for better visualization:
As you can see in the image, January is Column Index 4. (0 would be Type).
Here are my codes that validates per month:
public static void Validate_Month(DataGridView dataGridView, int month, int select, string kpisel)
{
try
{
int kpi = 2;
int category = 3;
decimal num;
FileStream fs = new FileStream(@"C:\brandon\InvalidColumnsByMonth.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
StringBuilder sb = new StringBuilder();
if (dataGridView.ColumnCount > 3)
{
sw.WriteLine("----------------------------");
sw.WriteLine("");
if (dataGridView.Columns.Contains("Category"))
{
for (int h = select; h <= month; h++)
{
for (int i = 0; i < dataGridView.RowCount; i++)
{
if ((dataGridView[2, i].Value.ToString() == kpisel || kpisel == "" || kpisel == null) && !Decimal.TryParse(dataGridView[h, i].Value.ToString(), out num))
{
if (dataGridView[h, i].Value.ToString() == null || dataGridView[h, i].Value.ToString() == "")
{
}
else
{
sb.AppendLine("[KPI]: " + dataGridView.Rows[i].Cells[kpi].Value.ToString());
sb.AppendLine("[Category]: " + dataGridView.Rows[i].Cells[category].Value.ToString());
sb.AppendLine("[Month]:" + dataGridView.Columns[h].Name.ToUpper());
sb.AppendLine("[VALUE]: " + dataGridView[h, i].Value.ToString() + "");
sb.AppendLine("");
sw.WriteLine("[KPI]: " + dataGridView.Rows[i].Cells[kpi].Value.ToString());
sw.WriteLine("[Category]: " + dataGridView.Rows[i].Cells[category].Value.ToString());
sw.WriteLine("[Month]:" + dataGridView.Columns[h].Name.ToUpper());
sw.WriteLine("[VALUE]: {" + dataGridView[h, i].Value.ToString() + "}");
sw.WriteLine("");
}
}
}
}
}
else if (!dataGridView.Columns.Contains("Category"))
{
for (int h = select - 1; h <= month; h++)
{
for (int i = 0; i < dataGridView.RowCount; i++)
{
if ((dataGridView[2, i].Value.ToString() == kpisel || kpisel == "" || kpisel == null) && !Decimal.TryParse(dataGridView[h, i].Value.ToString(), out num))
{
if (dataGridView[h, i].Value.ToString() == null || dataGridView[h, i].Value.ToString() == "")
{
}
else
{
sb.AppendLine("[KPI]: " + dataGridView.Rows[i].Cells[kpi].Value.ToString());
sb.AppendLine("[Category]: " + dataGridView.Rows[i].Cells[category].Value.ToString());
sb.AppendLine("[Month]:" + dataGridView.Columns[h].Name.ToUpper());
sb.AppendLine("[VALUE]: " + dataGridView[h, i].Value.ToString() + "");
sb.AppendLine("");
sw.WriteLine("[KPI]: " + dataGridView.Rows[i].Cells[kpi].Value.ToString());
sw.WriteLine("[Category]: " + dataGridView.Rows[i].Cells[category].Value.ToString());
sw.WriteLine("[Month]:" + dataGridView.Columns[h].Name.ToUpper());
sw.WriteLine("[VALUE]: {" + dataGridView[h, i].Value.ToString() + "}");
sw.WriteLine("");
}
}
}
}
}
if (sb.Length != 0)
{
MessageBox.Show(sb.ToString());
//Process.Start(@"C:\brandon\InvalidColumnsByMonth.txt");
}
else
{
int h = select;
if (dataGridView.Columns.Contains("Category"))
{
MessageBox.Show("No errors in month of " + dataGridView.Columns[h].Name + ".");
}
else if (!dataGridView.Columns.Contains("Category"))
{
MessageBox.Show("No errors in month of " + dataGridView.Columns[h - 1].Name + ".");
}
}
}
sw.WriteLine("----------------------------");
sw.Flush();
sw.Close();
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}
}
Here's the method that calls for Validate_Month
method
public static void Validate(CheckBox cb, DataGridView dataGridView1, String month, int i, ComboBox cboColumn)
{
if (cb.Checked == true && dataGridView1.Columns.Contains(month) )
{
if (cboColumn.SelectedItem != null)
{
ExcelMethods.Validate_Month(dataGridView1, 4 + i, 4 + i, cboColumn.SelectedItem.ToString());
}
else
{
MessageBox.Show("Select a KPI!", "No KPI Selected!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
And lastly, the dynamic btnValidate
for each Tabpage on the checkbox.
btnValidate.Click += (s, e) => //btnValidate Event
{
Form1.Validate(chkJan, dataGridView, "January", 0, cbo);
Form1.Validate(chkFeb, dataGridView, "February", 1, cbo);
Form1.Validate(chkMar, dataGridView, "March", 2, cbo);
Form1.Validate(chkApr, dataGridView, "April", 3, cbo);
Form1.Validate(chkMay, dataGridView, "May", 4, cbo);
Form1.Validate(chkJun, dataGridView, "June", 5, cbo);
Form1.Validate(chkJul, dataGridView, "July", 6, cbo);
Form1.Validate(chkAug, dataGridView, "August", 7, cbo);
Form1.Validate(chkSep, dataGridView, "September", 8, cbo);
Form1.Validate(chkOct, dataGridView, "October", 9, cbo);
Form1.Validate(chkNov, dataGridView, "November", 10, cbo);
Form1.Validate(chkDec, dataGridView, "December", 11, cbo);
};