visual-studio-2010 - 字符串未被识别为有效的 bool 值。 - 与 C# 相关的错误。 GridView 复选框字段

标签 visual-studio-2010 c#-4.0 oracle11g asp.net-4.0 odp.net

这里是编程环境。

  • 框架:ASP.NET Framework 4
  • 语言:Visual C# 2010
  • 数据库:Oracle 数据库 11g

这是场景。

我正在从 HR 示例架构的 HR.EMPLOYEES 表创建一个 GridView。我正在尝试将 COMMISSION_PCT 列中的传入数据转换为 bool 值,并使用 COMMISSION_PCT 的 DataField 下的复选框填充 GridView,因此在此字段中具有值的员工将显示为选中的复选框。这就是 GridView 对象控件到目前为止的样子。

<asp:GridView ID="GridViewEmployees" runat="server" AllowSorting="True" CellPadding="4"
    DataSourceID="SqlDataSourceOracle" GridLines="None" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="EMPLOYEE_ID" HeaderText="Employee ID" SortExpression="EMPLOYEE_ID" />
        <asp:BoundField DataField="FIRST_NAME" HeaderText="First Name" SortExpression="FIRST_NAME" />
        <asp:BoundField DataField="LAST_NAME" HeaderText="Last Name" SortExpression="LAST_NAME" />
        <asp:BoundField DataField="EMAIL" HeaderText="E-mail Address" SortExpression="EMAIL" />
        <asp:BoundField DataField="PHONE_NUMBER" HeaderText="Phone Number" SortExpression="PHONE_NUMBER" />
        <asp:BoundField DataField="HIRE_DATE" HeaderText="Hire Date" SortExpression="HIRE_DATE" />
        <asp:BoundField DataField="JOB_ID" HeaderText="Job ID" SortExpression="JOB_ID" />
        <asp:BoundField DataField="SALARY" HeaderText="Salary" SortExpression="SALARY" />
        <asp:CheckBoxField DataField="COMMISSION_PCT" HeaderText="Receives Commission" SortExpression="COMMISSION_PCT" />
        <asp:BoundField DataField="MANAGER_ID" HeaderText="Manager ID" SortExpression="MANAGER_ID" />
        <asp:BoundField DataField="DEPARTMENT_ID" HeaderText="Department ID" SortExpression="DEPARTMENT_ID" />
    </Columns>
</asp:GridView>

当然,当我尝试按原样预览页面时,我会收到以下错误消息:

“/”应用程序中的服务器错误。


字符串未被识别为有效的 bool 值。

描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息: System.FormatException:字符串未被识别为有效的 bool 值。

来源错误:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

堆栈跟踪:

[FormatException: String was not recognized as a valid Boolean.]
...

[HttpException (0x80004005): The data in the CheckBoxField 'COMMISSION_PCT' could not be parsed as a boolean value.  Try using a BoundField instead.]
...

到目前为止,我考虑过对 SQL 语句使用 DECODE,但这仍然会返回一个字符串值。不幸的是,由于 C# 包含强类型编程规则,而 Oracle 不支持 SQL 语句中的 bool 数据类型,因此我似乎需要使用后面的代码进行此转换。对于如何实现这一目标有什么建议吗?

最佳答案

我猜在幕后Boolean.Parse正在被调用,它需要一个像“false”这样的字符串。如果是这种情况,则 case 解码或 case 语句应该可以工作:

select decode(commission_pct,0,"false", "true") as has_commission
from your_table

这个例子对我有用:

  <form id="form1" runat="server">
  <div>
    <asp:GridView ID="PnlData" runat="server" DataSourceID="SqlDataSource1">
      <Columns>
        <asp:CheckBoxField DataField="Bln" HeaderText="Bln Test" SortExpression="Bln" />
      </Columns>
    </asp:GridView>
  </div>
  <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="select 'true' as bln from dual union select 'false' as bln from dual union select 'True' as bln from dual">
  </asp:SqlDataSource>
  </form>

关于visual-studio-2010 - 字符串未被识别为有效的 bool 值。 - 与 C# 相关的错误。 GridView 复选框字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071971/

相关文章:

visual-studio-2010 - 从批处理文件附加 VS2010 中的 Windows 调试器?

asp.net - ASPX 页面上每个响应行上的四个记录

c# - 将类转换为 xml 的最佳方法是什么,反之亦然

oracle11g - Oracle - 返回总和以及旋转总和?

xml - 'packages' 元素未声明

visual-studio-2010 - Visual Studio 2010中的空白可见性切换在哪里?

c# - 调试器停止时代码正在运行?

asp.net - 我想将 "An error occurred object reference not set to an instance of an object while insert and update new record"插入数据库

sql - 使用不同远程数据库上的包创建 oracle pl/sql 包

oracle - 如何将新添加的列的值添加到 Oracle 11g 中的所有现有行