我在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();
}
}下面是使用复选框创建列的方法:
private void addCheckBoxColumn()
{
DataGridViewCheckBoxColumn cbCol = new DataGridViewCheckBoxColumn();
cbCol.ValueType = typeof(bool);
cbCol.Name = "Select";
cbCol.HeaderText = "Select";
dataGridView2.Columns.Add(cbCol);
}现在一切都很好:

我创建了一个用于测试的按钮,当单击该按钮时,我希望该按钮能够在label2上写入具有选中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时,会得到以下异常:
“System.FormatException类型的未处理异常发生在mscorlib.dll中 附加信息:字符串不能识别为有效的布尔值。“
你能帮我解决这个问题吗?半小时前我写了一个类似的线程,当时我遇到了一个不同的问题,但是它被复制了,所以我试图修改我的代码,现在我得到了这个。
发布于 2015-02-20 17:35:23
列索引不是您所认为的那样。用这个名字代替:
if (Convert.ToBoolean(row.Cells["Select"].Value)) {
...
}网格有一个数据源,但是当您将CheckBox列添加到网格中时,它并不是数据源的一部分。这可能会搞乱列的索引值。实际上,在我的计算机上运行代码时,CheckBox列的索引为零,尽管它是最后一列。
https://stackoverflow.com/questions/28634420
复制相似问题