DatagridView CheckBox检查返回FormatExceptiion

时间:2015-02-20 17:07:26

标签: c# winforms datagridview

我在StackOverflow和整个互联网上浏览了很多但却找不到任何可以帮助我的东西。我将一些SQL数据库中的信息放到DataGridView上,我正在添加一个带复选框的额外列。

private void populatedataGrid()
{
  String sql = "SELECT pm.Name, pm.telephone, pm.email, pm.validID, comp.name as `Company` FROM `project managers`as pm JOIN `companies`as comp ON pm.Companies_companyID = comp.companyID where pm.Companies_companyID =" + loginID;
  MySqlCommand command = new MySqlCommand(sql, dh.Connection);

  try
  {
    MySqlDataAdapter adapter = new MySqlDataAdapter();
    adapter.SelectCommand = command;
    DataTable dbdataset = new DataTable();
    adapter.Fill(dbdataset);
    BindingSource bSource = new BindingSource();

    // DataGridView1 is a different DataGrid, i am working on DataGridView2
    bSource.DataSource = dbdataset;
    dataGridView1.DataSource = bSource;
    dataGridView2.DataSource = bSource;
    //Method for adding the additional column with checkboxes (ill paste the method below)
    addCheckBoxColumn();
    //I make it so that only the checkboxes can be edited
    foreach (DataGridViewColumn dc in dataGridView2.Columns)
    {
      if (dc.Index.Equals(5))
      {
        dc.ReadOnly = false;
      }
      else
      {
        dc.ReadOnly = true;
      }
    }
    adapter.Update(dbdataset);
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }
  finally
  {
    dh.Connection.Close();
  }
}

以下是使用Checkboxes创建列的方法:

private void addCheckBoxColumn()
{
  DataGridViewCheckBoxColumn cbCol = new DataGridViewCheckBoxColumn();
  cbCol.ValueType = typeof(bool);
  cbCol.Name = "Select";
  cbCol.HeaderText = "Select";
  dataGridView2.Columns.Add(cbCol);
}

现在一切正常: DataGridView

我创建了一个用于测试目的的按钮,我想在单击时写下在label2上有一个已检查复选框的行数。

private void button1_Click(object sender, EventArgs e)
{
  int counter = 0;
  foreach (DataGridViewRow row in dataGridView2.Rows)
  {
    if (Convert.ToBoolean(row.Cells[5].Value))
    {
      counter++;
    }
  }
  label2.Text = counter.ToString();
}

当我运行它并单击Button1时,我得到以下例外:

  

“mscorlib.dll中发生了'System.FormatException'类型的未处理异常

     

附加信息:字符串未被识别为有效的布尔值。“

您能否就如何解决这个问题给我一些帮助。半小时前我写了一个类似的线程,当时我遇到了一个不同的问题,但它得到了重复,所以我试着改变我的代码,现在我明白了。

1 个答案:

答案 0 :(得分:1)

列索引不是您认为的。请改用名称:

if (Convert.ToBoolean(row.Cells["Select"].Value)) {
  ...
}

您的网格有一个数据源但是当您将CheckBox列添加到网格时,它不是数据源的一部分。这可能会弄乱列的索引值。在我的计算机上运行代码实际上最终得到的索引为零的CheckBox列,尽管显示为最后一列。