C# 从数据表中获取布尔值?

C# 从数据表中获取布尔值?,c#,datagridview,datatable,boolean,C#,Datagridview,Datatable,Boolean,我正在从DataTableDataGridView.DataSource获取一个DataTable。 此datagridview有两列,其值为布尔值,显示方式类似于复选框。 但是当我试图从dataTable中获取值时,我在Boolean列中得到一个无效的强制转换异常。这是我获取值的代码 private void WriteDataGridChanges( int grupoIndex ) { if( dataGridView1.RowCount > 0 ) {

我正在从DataTableDataGridView.DataSource获取一个DataTable。 此datagridview有两列,其值为布尔值,显示方式类似于复选框。 但是当我试图从dataTable中获取值时,我在Boolean列中得到一个无效的强制转换异常。这是我获取值的代码

private void WriteDataGridChanges( int grupoIndex ) {
        if( dataGridView1.RowCount > 0 ) {
            escuela.Grupos[grupoIndex].Alumnos.Clear();
            DataTable dt = (DataTable)dataGridView1.DataSource;
            foreach( DataRow r in dt.Rows ) {
                /*crear un alumno, usar sus modificadores para los datos acorde con
                 el datagridview y añadirlo al grupo indicado 'lulz'
                 */
                Alumno al = new Alumno();
                al.Nombre = (String)r["Nombre"];
                al.Apellidos = (String)r["Apellidos"];
                al.Cuota = (double)r["Cuota Total"];
                al.CostoMaterial = (double)r["Costo de Materiales"];
                al.MaterialEntregado = (Boolean)r["Material entregado?"];
                al.CuotaCubierta = (Boolean)r["Cuota Cubierta?"];
                al.Parcialidad = (double)r["Parcialidad total"];
                al.ParcialidadMaterial = (double)r["Parcialidad de material total"];
                al.UltimaParcialidad = (DateTime)r["Fecha último pago colegiatura"];
                al.UltimoPagoMaterial = (DateTime)r["Fecha último pago de material"];
                escuela.Grupos[grupoIndex].Alumnos.Add(al);
            }
        }
        edited = false;
    }
下面是创建dataTable并将其传递给dataGridView的代码

        private DataTable RefreshGruposGrid( Grupo g ) {
        DataTable t = new DataTable();
        t.Columns.Add("Nombre", typeof(String));
        t.Columns.Add("Apellidos", typeof(String));
        t.Columns.Add("Cuota Total", typeof(double));
        t.Columns.Add("Costo de Materiales", typeof(double));
        t.Columns.Add("Material entregado?", typeof(Boolean));
        t.Columns.Add("Cuota Cubierta?", typeof(Boolean));
        t.Columns.Add("Parcialidad total", typeof(double));
        t.Columns.Add("Parcialidad de material total", typeof(double));
        t.Columns.Add("Fecha último pago colegiatura", typeof(DateTime));
        t.Columns.Add("Fecha último pago de material", typeof(DateTime));
        foreach( Alumno a in g.Alumnos ) {
            DataRow r = t.NewRow();
            r["Nombre"] = a.Nombre;
            r["Apellidos"] = a.Apellidos;
            r["Cuota Total"] = a.Cuota;
            r["Costo de Materiales"] = a.CostoMaterial;
            r["Material entregado?"] = a.MaterialEntregado;
            r["Cuota Cubierta?"] = a.CuotaCubierta;
            r["Parcialidad total"] = a.Parcialidad;
            r["Parcialidad de material total"] = a.ParcialidadMaterial;
            r["Fecha último pago colegiatura"] = a.UltimaParcialidad;
            r["Fecha último pago de material"] = a.UltimoPagoMaterial;
            t.Rows.Add(r);
        }
        return t;
    }

提前谢谢

好的,这就是DataGridView的默认值,每当我按下复选框列时,我都会得到一个值,但是如果我不选中它,它会返回一种空值。

数据库中存储的值是0,1或true false或true false请澄清同样对于DataGridview,您是否将AutoGenerateColumns属性设置为true或false我没有弄错,如果您添加的列与绑定的列不匹配,您将需要为DataGridview创建新列`因为您将其绑定到DataTablehi DJKRAZE im使用数据库可以简化我的生活!因为系统需求。但我现在发现了一些有趣的事情。将等待您对初始问题的最新评论和/或修正。。无论您是否在使用数据库,您仍然在使用DataGridView并将其绑定到Datatable。我之前关于自动生成的评论可能仍然有效。对不起,我刚才按enter键。。。自动生成列a没有触及该属性。。。此外,如果我运行该程序,但实际上在dataGridView中按了复选框,它将正确解析,但如果我不选中它们,则会出现异常