使用 File.ReadAllLines 验证 DataGridView 中的列?
Validate a Column in DataGridView using File.ReadAllLines?
我正在对名为 "KPI" 的特定列进行验证。
我正在做的是制作一个将用于验证列的 .txt 文件。
.txt 文件如下所示。
正如您在记事本中看到的那样,它有 4 个值。
- 收入
- 销量
- 总计
- 品牌竞争
除此之外,验证会说,"is NOT valid"。
这是我用来从 .txt 文件中获取值的代码
List<string> fields = new List<string>();
var lines = File.ReadAllLines(@"\SMITSHOME01\Home_Folder_1$\vhernandez\My Documents\Visual Studio 2013\validate.txt");
for (int i = 0; i < lines.Length; i++)
{
fields.Add(lines[i]);
}
但是我不太擅长循环所以我想问是否有人可以帮我做。
现在,我正在做的就是这个。
for (int i = 0; i < dataGridView.RowCount; i++)
{
//MessageBox.Show(dataGridView.Rows[i].Cells["KPI"].Value.ToString());
if (dataGridView.Rows[i].Cells["KPI"].Value.ToString().Contains(fields[i]))
{
//sb.AppendLine(dataGridView.Rows[i].Cells["KPI"].Value.ToString() + " is Valid.");
}
else if (dataGridView.Rows[i].Cells["KPI"].Value.ToString() == null || dataGridView.Rows[i].Cells["KPI"].Value.ToString() == "" || dataGridView.Rows[i].Cells["KPI"].Value.ToString() == "KPI" || dataGridView.Rows[i].Cells["KPI"].Value.ToString() == "Category")
{
}
else
{
//MessageBox.Show("Row not decimal:" + " [ " + dataGridView[h, i].Value.ToString() + "] in column " + dataGridView.Columns[h].Name);
sb.AppendLine(dataGridView.Rows[i].Cells["KPI"].Value.ToString() + " is **NOT** Valid.");
}
}
我正在使用 .Contains()
进行验证,但由于 for
循环效率低下,我总是得到 System.ArgumentOutOfRangeException
。
我想在 if .Contains()
中动态添加 fields[]
或以某种方式引用它,有人可以帮助我吗?
附上表格图片供参考:
我认为您的入住 if
条件应该是相反的:
if(fields.Contains(dataGridView.Rows[i].Cells["KPI"].Value.ToString()))
我正在对名为 "KPI" 的特定列进行验证。 我正在做的是制作一个将用于验证列的 .txt 文件。
.txt 文件如下所示。
正如您在记事本中看到的那样,它有 4 个值。
- 收入
- 销量
- 总计
- 品牌竞争
除此之外,验证会说,"is NOT valid"。
这是我用来从 .txt 文件中获取值的代码
List<string> fields = new List<string>();
var lines = File.ReadAllLines(@"\SMITSHOME01\Home_Folder_1$\vhernandez\My Documents\Visual Studio 2013\validate.txt");
for (int i = 0; i < lines.Length; i++)
{
fields.Add(lines[i]);
}
但是我不太擅长循环所以我想问是否有人可以帮我做。 现在,我正在做的就是这个。
for (int i = 0; i < dataGridView.RowCount; i++)
{
//MessageBox.Show(dataGridView.Rows[i].Cells["KPI"].Value.ToString());
if (dataGridView.Rows[i].Cells["KPI"].Value.ToString().Contains(fields[i]))
{
//sb.AppendLine(dataGridView.Rows[i].Cells["KPI"].Value.ToString() + " is Valid.");
}
else if (dataGridView.Rows[i].Cells["KPI"].Value.ToString() == null || dataGridView.Rows[i].Cells["KPI"].Value.ToString() == "" || dataGridView.Rows[i].Cells["KPI"].Value.ToString() == "KPI" || dataGridView.Rows[i].Cells["KPI"].Value.ToString() == "Category")
{
}
else
{
//MessageBox.Show("Row not decimal:" + " [ " + dataGridView[h, i].Value.ToString() + "] in column " + dataGridView.Columns[h].Name);
sb.AppendLine(dataGridView.Rows[i].Cells["KPI"].Value.ToString() + " is **NOT** Valid.");
}
}
我正在使用 .Contains()
进行验证,但由于 for
循环效率低下,我总是得到 System.ArgumentOutOfRangeException
。
我想在 if .Contains()
中动态添加 fields[]
或以某种方式引用它,有人可以帮助我吗?
附上表格图片供参考:
我认为您的入住 if
条件应该是相反的:
if(fields.Contains(dataGridView.Rows[i].Cells["KPI"].Value.ToString()))