【问题标题】:Check value of datatable with C#用 C# 检查数据表的值
【发布时间】:2020-03-07 12:42:48
【问题描述】:

我想检查同一列的数据表的值是否等于“int”,所以如果它是真的,我想用内容值计算总和。这是我的代码,当我单击 sum 按钮“pas tous entier”时,它总是返回。 提前谢谢!

private void button7_Click(object sender, EventArgs e)
    {
        int i = 0, s = 0;
        String type ="int";

        DataTable dt = new DataTable("Table_insertion");

        bool exists = dt.AsEnumerable().Any(row => type == row.Field<String>("Type"));
        if (exists== true)
        {
            for (i = 0; i < dataGridView1.Rows.Count; ++i)
            {
                s += Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);

            }
            label5.Text = s.ToString();           
        } 
        else
        {
            MessageBox.Show("pas tous entiers");
        }

    }

【问题讨论】:

  • 当所有值实际上都是整数时它是否工作,但如果字符串不能被解释为整数则抛出异常?
  • 看起来你想做类似于How to check if a number is an integer in .NET?的事情
  • @John Spiegel 当所有值都是整数时它可以工作(不添加 bool 变量和 if 条件),但是如果我添加条件,当我点击求和按钮“pas tous entiers”时它总是返回。当我向数据表中添加一个字符串时,它会显示一个错误!
  • @jazakari no,我想检查数据表中名为“int”的字符串值
  • DataTable dt = new DataTable("Table_insertion"); 永远里面有任何数据。

标签: c# sql .net datatable


【解决方案1】:

这里似乎不需要数据表。

也许以下就足够了。

for (i = 0; i < dataGridView1.Rows.Count; ++i)
{
  var str = dataGridView1.Rows[i].Cells[2].Value?.ToString();

  if( !string.IsNullOrEmpty(str) && Int32.TryParse(str, out var parsed)
  {
     s += parsed;
  }
}

如果要检查数据表中列的类型,可以检查其DataType

foreach (var col in datatable1.Columns) 
{
      if ( col.DataType == typeof(System.Int16) || col.DataType == typeof(System.Int32)) // Or other types 
      {
           ....

【讨论】:

  • 是的,我试过了,但它显示一个错误 => 无法将对象转换为字符串!!
  • =>if (Int32.TryParse(str, out var parsed)
  • 是的,即使有字符串值它也会返回总和,非常感谢!
【解决方案2】:

您是否只是想评估返回的字符串是否仅包含数字?如果是这样,您可能希望对数据使用正则表达式匹配。这里有一个很好的例子:Regex for numbers only

【讨论】:

  • 不,我只想检查名为“int”的字符串值是否存在于名为“type”的列的行中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多