首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DatagridView CheckBox检查返回FormatExceptiion

DatagridView CheckBox检查返回FormatExceptiion
EN

Stack Overflow用户
提问于 2015-02-20 17:07:26
回答 1查看 244关注 0票数 1

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

代码语言:javascript
复制
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();
  }
}

下面是使用复选框创建列的方法:

代码语言:javascript
复制
private void addCheckBoxColumn()
{
  DataGridViewCheckBoxColumn cbCol = new DataGridViewCheckBoxColumn();
  cbCol.ValueType = typeof(bool);
  cbCol.Name = "Select";
  cbCol.HeaderText = "Select";
  dataGridView2.Columns.Add(cbCol);
}

现在一切都很好:

我创建了一个用于测试的按钮,当单击该按钮时,我希望该按钮能够在label2上写入具有选中label2的行数。

代码语言:javascript
复制
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时,会得到以下异常:

“System.FormatException类型的未处理异常发生在mscorlib.dll中 附加信息:字符串不能识别为有效的布尔值。“

你能帮我解决这个问题吗?半小时前我写了一个类似的线程,当时我遇到了一个不同的问题,但是它被复制了,所以我试图修改我的代码,现在我得到了这个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 17:35:23

列索引不是您所认为的那样。用这个名字代替:

代码语言:javascript
复制
if (Convert.ToBoolean(row.Cells["Select"].Value)) {
  ...
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28634420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档