如何遍历列的所有单元格并检索值

时间:2017-05-18 17:27:16

标签: c# datagridview

我似乎无法访问我的专栏中的实际值;我每行的值最终都是相同的实际行数。我似乎无法解决这个问题。任何帮助,将不胜感激。这是我目前的方法:

  private string converter() {
   string binaryString = string.Empty;
   int cellValue = 0;
   int colIndex = 3;
   foreach(DataGridViewRow row in this.dataGridView1.Rows)
     {
       cellValue = (int) row.Cells[colIndex].Value;
       binaryString = parseString(cellValue);
      }
     return binaryString;
    }

3 个答案:

答案 0 :(得分:0)

您正在每个循环持续时间中替换“binaryString”的值。

我不确定你的目标是什么,但也许这就是你的意思:

binaryString += parseString(cellValue);

注意 + =

编辑 - 另一种方法?

也许您希望转换列中的每个值?那试试吧。

private List<String> converter() 
{
   List<String> binaryStrings = new List<String>();
   int cellValue = 0;
   int colIndex = 3;
   foreach(DataGridViewRow row in this.dataGridView1.Rows)
   {
       cellValue = (int) row.Cells[colIndex].Value;
       binaryStrings.Add(parseString(cellValue));
   }
   return binaryStrings;
}

这将为您提供已转换字符串的列表。每行一个字符串。

答案 1 :(得分:0)

如果您使用的是DataTable,我认为您不能让Expression将基数为10的数字转换为二进制字符串表示形式。但是,只要DataRow发生更改,就可以将二进制字符串添加到单元格中。如果DataRowDataTable发生更改,则代码可以将基数10值转换为二进制字符串表示形式,并将字符串添加到正确的单元格中。

为了实现这一点,代码需要在填充RowChanged之前注册DataTable事件。此外,由于在RowChanged事件中更改了值,因此当代码将二进制字符串添加到表时,必须关闭此事件。这样可以防止出现明显的无限循环,每次将二进制字符串添加到行中时,循环都会自动调用。

您需要更改名称以符合您的要求。以下是使用RowChanged注册DataTable事件所需的行。请注意,在使用数据填充表之前,需要设置此行。

gridTable.RowChanged += new DataRowChangeEventHandler(Row_Changed);

然后我们需要的是这个Row_Changed方法。注意,事件是从DataTable取消注册的,以避免无限循环。

private static void Row_Changed(object sender, DataRowChangeEventArgs e) {
  gridTable.RowChanged -= new DataRowChangeEventHandler(Row_Changed);
  DataRow dr = e.Row;
  int base10 = (int)dr["Base10"];
  string binary = Convert.ToString(base10, 2);
  dr["Binary"] = binary;
  gridTable.RowChanged += new DataRowChangeEventHandler(Row_Changed);
}

我猜测可能有其他方法可以实现这一点,这里的目标是避免必须遍历网格来设置二进制字符串。希望这会有所帮助。

答案 2 :(得分:0)

我正在寻找解决您问题的方法... 在这里,我来了。。

在这里工作。

   foreach (DataGridViewColumn column in dataGridView1.Columns)
                {
                    if(column.Name == "wanted column name")
                    {
                        for(int iRow = 0; iRow < dataGridView1.RowCount; iRow++)
                        {
                            string data = (string)dataGridView1[column.Index, iRow].Value;
                            //Do something with data
                        }

                    }

                }