我有一个gridview控制器,其中有一组BoundField列到我的数据源。我还有一个CheckBoxField我想要检查,具体取决于我从数据库中获取的表中的行是否相应标记。问题是,Oracle没有布尔类型,ASP.NET期望一个布尔值来标记复选框。对此有什么解决方法吗?
这是我的gridview,带有复选框列。
<asp:GridView ID="DeviceGridView" runat="server" CssClass="SmallGridView"
DataSourceID="DeviceDataSource" AutoGenerateColumns="False"
EmptyDataText="No devices found." CellPadding="4" ForeColor="#333333"
GridLines="None" OnRowCreated="GridView_RowCreated"
OnRowDataBound="GridView_RowDataBound" >
<FooterStyle CssClass="gridViewFooter" />
<RowStyle CssClass="gridViewRow" />
<EditRowStyle CssClass="gridViewEditRow" />
<SelectedRowStyle CssClass="gridViewSelectedRow" />
<HeaderStyle CssClass="gridViewHeader" />
<AlternatingRowStyle CssClass="gridViewAltRow" />
<Columns>
<asp:BoundField HeaderText="DeviceID" DataField="device_id" />
<asp:BoundField HeaderText="Device Type" DataField="device_type" />
<asp:BoundField HeaderText="Description" DataField="description" />
<asp:BoundField HeaderText="Enable Logging" DataField="enable_logging" />
<asp:CheckBoxField DataField="normal_toggle" Text="Normal User Logging" />
</Columns>
</asp:GridView>
答案 0 :(得分:1)
请尝试使用模板字段,而不是使用<asp:CheckBoxField>
:
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="cb" runat="server"
Checked='<%# Eval("normal_toggle") == 1 %>'
AutoPostBack="true"
OnCheckedChanged="YourCheckedChangedEvent"/>
</ItemTemplate>
</asp:TemplateField>
如果normal_toggle
值等于1,则会检查您的复选框,否则将取消选中。相应地调整您的数据。
<强>更新强>
在模板字段内的<asp:Checkbox>
添加了一个事件。
答案 1 :(得分:1)
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="cb" runat="server"
Checked='<%# Eval("normal_toggle").ToString() == "Y" ? true : false %>' />
</ItemTemplate>
</asp:TemplateField>
答案 2 :(得分:0)
这是我对此问题的解决方案 首先,我创建了自己的CheckBox组件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.Text;
namespace Production_Manager.Util.Objects
{
public class CheckBoxYN : System.Web.UI.WebControls.CheckBox
{
public string YesNo
{
get
{
if (this.Checked)
return "Y";
else
return "N";
}
set
{
bool changed = false;
if (value == "Y")
{
if (!this.Checked)
changed = true;
this.Checked = true;
if (changed)
OnPropertyChanged("YesNo");
}
else
{
if (this.Checked)
changed = true;
this.Checked = false;
if (changed)
OnPropertyChanged("YesNo");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
protected override void OnCheckedChanged(EventArgs e)
{
OnPropertyChanged("YesNo");
base.OnCheckedChanged(e);
}
}
}
编译项目后,CheckBoxYN将出现在工具箱中。 在项目和编辑模板中放置您的对象 YOURBOOLFIELD: '/&gt;
希望这有帮助。
答案 3 :(得分:0)
我知道这已经很老了,但我只花了几个小时试图为MYSQL排序,可能适用于ORACLE。
在您的UPDATE或INSERT语句中,您可以使用此
column_name = IF(?=&#39; True&#39;,1,0)
VALUES(如果(?=&#39; True&#39;,1,0),...)
无需将绑定的复选框字段更改为项目模板或任何内容。
我不确定这是否重要,但我将参数类型更改为布尔值,因为我现在让它工作,我不想改变它。