c#来自数据库的强制转换checkstate值无效

c#来自数据库的强制转换checkstate值无效,c#,casting,C#,Casting,我有一个返回设置的函数: public DataTable check_settings() { Data_access.Access_Layer Layer = new Data_access.Access_Layer(); Layer.Open(); DataTable table = new DataTable(); table = Layer.SelectData("check_settings", null); Layer.Close();

我有一个返回设置的函数:

public DataTable check_settings()
{
    Data_access.Access_Layer Layer = new Data_access.Access_Layer();
    Layer.Open();
    DataTable table = new DataTable();
    table = Layer.SelectData("check_settings", null);
    Layer.Close();
    return table;
}
DataTable _table = new DataTable();
_table = Option.check_settings();
options.Capital.CheckState = (CheckState)_table.Rows[0][0];
options.MailConfirm.CheckState = (CheckState)_table.Rows[0][1];
options.Notifications.CheckState = (CheckState)_table.Rows[0][2];
此表返回一行: 结果被检查或取消检查 我想要的是将此结果作为设置:

public DataTable check_settings()
{
    Data_access.Access_Layer Layer = new Data_access.Access_Layer();
    Layer.Open();
    DataTable table = new DataTable();
    table = Layer.SelectData("check_settings", null);
    Layer.Close();
    return table;
}
DataTable _table = new DataTable();
_table = Option.check_settings();
options.Capital.CheckState = (CheckState)_table.Rows[0][0];
options.MailConfirm.CheckState = (CheckState)_table.Rows[0][1];
options.Notifications.CheckState = (CheckState)_table.Rows[0][2];

然后我得到了一个错误Invalid Cast

在不知道表中有什么数据的情况下,无法真正知道正确的解决方案,但您可能需要

options.Capital.CheckState = _table.Rows[0][0] ? CheckState.Checked : CheckState.Unchecked;
比较只需要基于表中的实际数据就有意义。

它是布尔值 我将Sql中的数据类型从VarChar更改为BIT 在我的代码中:

我将检查状态更改为已检查

    options.Capital.Checked = (Boolean)_table.Rows[0][0];
    options.MailConfirm.Checked = (Boolean)_table.Rows[0][1];
    options.Notifications.Checked = (Boolean)_table.Rows[0][2];

而且它工作得很好

如果check state指的是checkbox的checkstate,则应将其强制转换或理想地将其转换为布尔表。显然,无法将行[i][j]显式解析为checkstate。即使它返回的值为选中或未选中(checkstate)?右键单击Access\u层上的VS并选择“定义”。检查SelectData的类型以确保它是DataTable。然后检查列以确保列0-2是CheckState对象。我已经在数据库的表中添加了值Checked/Unchecked?但是作为什么数据类型?是整数还是字符串?如果它们是int值,那么它们应该能够强制转换到枚举。如果是这种情况,那么您的数据可能包含的值不在0和2之间。在调试中运行代码,当出现错误时,检查_table[][]中的值和值的类型。转换为False或True,我将值转换为boolean,然后更新我的答案,如果数据类型是boolean,这将起作用。我还看到您将代码更改为使用options.Capital.Checked,这也适用于布尔值。