2

这里是编程环境。

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

这是场景。

我正在从 HR Sample Schema 的 HR.EMPLOYEES 表中创建一个 GridView。我正在尝试将来自 COMMISSION_PCT 列的传入数据转换为布尔值,并使用 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>

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

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


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

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

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

源错误:

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 语句中的布尔数据类型,看来我需要在后面的代码中进行这种转换。对如何实现这一点有任何建议吗?

4

1 回答 1

3

在幕后,我猜Boolean.Parse正在被调用,它需要一个像“false”这样的字符串。如果是这种情况,则解码或 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>
于 2013-06-13T14:07:15.337 回答