我在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);
}
现在一切正常:
我创建了一个用于测试目的的按钮,我想在单击时写下在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'类型的未处理异常
附加信息:字符串未被识别为有效的布尔值。“
您能否就如何解决这个问题给我一些帮助。半小时前我写了一个类似的线程,当时我遇到了一个不同的问题,但它得到了重复,所以我试着改变我的代码,现在我明白了。
答案 0 :(得分:1)
列索引不是您认为的。请改用名称:
if (Convert.ToBoolean(row.Cells["Select"].Value)) {
...
}
您的网格有一个数据源但是当您将CheckBox列添加到网格时,它不是数据源的一部分。这可能会弄乱列的索引值。在我的计算机上运行代码实际上最终得到的索引为零的CheckBox列,尽管显示为最后一列。