【问题标题】:If rows exists before adding it to datagridview如果行在添加到 datagridview 之前存在
【发布时间】:2017-06-04 14:00:42
【问题描述】:

我无法让此代码正常工作,我正在从 SQL (WHILE) 查询向 datagridview 添加行,但在执行此操作时,我需要在内部运行一个 foreach 来检查如果 row.Cells[0].Value 在添加之前存在,但我收到以下错误:

错误 1 ​​foreach 语句无法对“System.Windows.Forms.DataGridView”类型的变量进行操作,因为“System.Windows.Forms.DataGridView”不包含“GetEnumerator”C:\Users...的公共定义。 ......project1.cs

错误 2 不能在此范围内声明名为“行”的局部变量,因为它会给“行”赋予不同的含义,“行”已在“父或当前”范围中用于表示其他内容 C:\Users ................project1.cs

这是我的代码:

//dgData is a datagridview with columns created programmatically, this works already by the way.
dgData.ColumnCount = 3; 
dgData.Columns[0].Name = "ColumnA";      
dgData.Columns[0].Name = "ColumnB"; 
dgData.Columns[0].Name = "ColumnC";

string query1 = " SELECT * FROM ....... ";


SqlCommand cmd1 = new SqlCommand(query1, connection);
            //Create a data reader and Execute the command
            SqlDataReader dataReader1 = cmd1.ExecuteReader();



Application.DoEvents();
while (dataReader1.Read())
{

    string[] row = new string[] { dataReader1["columnA"].ToString(),     dataReader1["columnB"].ToString(), dataReader1["columnC"].ToString() };
    Boolean found = false;

    // this foreach is what doesn't work.
    foreach (DataGridViewRow row in dgData)
    {
         if (row.Cells[0].Value == dataReader1["columnA"].ToString())
         {
                 // row exists
                 found = true;
                 MessageBox.Show("Row already exists");                     
         }
    }

    if (!found)
    {
         dgData.Rows.Add(row);
    }


}

【问题讨论】:

  • 什么是dgData?它是在哪里定义的?

标签: c# sql datagridview


【解决方案1】:

rowstring[] 和循环变量的名称。重命名其中一个

DataGridView dgData 不可枚举,在foreach 中迭代dgData.Rows

while (dataReader1.Read())
{
    string[] newRow = new string[] 
    { 
      dataReader1["columnA"].ToString(),
      dataReader1["columnB"].ToString(), 
      dataReader1["columnC"].ToString() 
    };
    Boolean found = false;
    foreach (DataGridViewRow row in dgData.Rows)
    {
         if (row.Cells[0].Value == dataReader1["columnA"].ToString())
         {
              // row exists
              found = true;
              MessageBox.Show("Row already exists");
              break;                   
         }
    }

    if (!found)
    {
         dgData.Rows.Add(newRow);
    }
}

【讨论】:

  • dgData 是一个 datagridview 对象,列是通过编程方式创建的
  • dgData.ColumnCount = 3; dgData.Columns[0].Name = "ColumnA"; dgData.Columns[0].Name = "ColumnB"; dgData.Columns[0].Name = "ColumnC";这已经有效,它不是 foreach 我需要验证 datagridview = dgData 中不存在的行谢谢。
  • @AJ152,我的回答对您修复编译错误有帮助吗?
  • 只有名为“row”的局部变量错误,但主要问题是我在使用 foreach 时遇到了错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多