【发布时间】:2018-02-14 01:21:52
【问题描述】:
我正在制作一个 Excel 验证程序。导入后,将验证每列是否为小数。
复选框是动态生成的,并使用以下代码表示每个选项卡(选项卡是 Excel 文件中的工作表)数据表中的列:
int dynamicHeight = 0;
int padding = 10;
CheckBox[] chk = new CheckBox[dt.Columns.Count];
for (int i = 0; i <= dt.Columns.Count - 1; i ++)
{
chk[i] = new CheckBox();
chk[i].Name = dt.Columns[i].ColumnName;
chk[i].Text = dt.Columns[i].ColumnName;
chk[i].AutoCheck = true;
chk[i].Bounds = new Rectangle(10, 20 + padding + dynamicHeight, 40, 22);
panelCol.Controls.Add(chk[i]);
dynamicHeight += 20;
panelCol.Size = new Size(120, dynamicHeight);
panelCol.Controls.Add(chk[i]);
chk[i].Location = new Point(0, dynamicHeight);
chk[i].Size = new Size(120, 21);
panelCol.BackColor = Color.White;
panelCol.AutoScroll = true;
//panelCol.AutoScrollMinSize = new Size (0, 1200);
}
我想打电话给他们,但也动态地。我正在做的是手动像这样预设每个复选框:
chk[0].CheckedChanged += (s, e) =>
{
decimal num;
if (chk[0].Checked == true && chk[0].Name.Contains(dt.Columns[0].ColumnName))
{
//MessageBox.Show("HELLOW WORLD " + 0);
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (!Decimal.TryParse(dataGridView1.Rows[i].Cells["January"].Value.ToString(), out num))
{
if (dataGridView1.Rows[i].Cells[dt.Columns["January"].ColumnName].Value.ToString() == null || dataGridView1.Rows[i].Cells[dt.Columns["January"].ColumnName].Value.ToString() == "")
{
}
else
{
MessageBox.Show(dataGridView1.Rows[i].Cells["January"].Value.ToString() + " NOT A DECIMAL!");
}
}
else
{
}
}
}
};
是否有针对此问题的修复或解决方案,以便我不必手动预设它们?导致如果 Excel 文件具有不同的列名,这意味着再次预设新列,该怎么办。
【问题讨论】:
-
预设每个复选框是什么意思?你的意思是当它被检查时有一个特定的方法?
-
也可以重构:
if (String.IsNullOrEmpty(dataGridView1.Rows[i].Cells[dt.Columns["January"].ColumnName].Value.ToString() {} -
是的。当复选框被选中时,如果有一种方法无需在特定方法中输入它们。基本上想要的我想要的是这样的。如果选中复选框 January,则如果存在非十进制值,则将验证来自
DataTable的列 January,而无需调用通过索引值或列名调用它们的特定方法。跨度> -
将复选框名称与列名称进行比较可能会完成该任务
-
我不知道该怎么做。你可以解释吗?我是 C# 的新手。
标签: c# excel checkbox datagridview