用 C# 检查数据表的值

Posted

技术标签:

【中文标题】用 C# 检查数据表的值【英文标题】:Check value of datatable with 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"); 永远里面有任何数据。 【参考方案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”的列的行中

以上是关于用 C# 检查数据表的值的主要内容,如果未能解决你的问题,请参考以下文章

ASP.net (C#)如何检查数据库内容是不是更新?

c#如何检查SelectedListItem的两个列表是不是具有相同的值

“运行时检查失败 #0 - ESP 的值未在函数调用中正确保存”从 C++ 代码成功 C# 回调后

检查两个数据帧之间的公共行并将第二个数据帧的匹配行替换为 df1 的值

检查集合c#中是不是存在元素

如何在 C# 中快速检查两个数据传输对象是不是具有相同的属性?