ASP.NET CheckBoxField связывается с оракулом, который не имеет логического значения.Известная работа вокруг? - PullRequest
1 голос
/ 07 сентября 2011

У меня есть контроллер gridview с набором столбцов BoundField для моего источника данных.У меня также есть CheckBoxField, который я хочу проверить в зависимости от того, помечена ли соответствующая строка в таблице, которую я получаю из базы данных.Проблема в том, что Oracle не имеет логического типа, и ASP.NET ожидает, что логическое значение отметит флажок.Есть ли какой-то способ обойти это?

Вот мой обзор сетки со столбцом флажка.

<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>

Ответы [ 4 ]

1 голос
/ 24 августа 2012

<asp:TemplateField> <ItemTemplate> <asp:CheckBox ID="cb" runat="server" Checked='<%# Eval("normal_toggle").ToString() == "Y" ? true : false %>' /> </ItemTemplate> </asp:TemplateField>

1 голос
/ 07 сентября 2011

Вместо использования <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> внутри поля шаблона.

0 голосов
/ 07 августа 2014

Я знаю, что это действительно старая версия, но я потратил пару часов, пытаясь отсортировать ее для MYSQL и она может работать для ORACLE.

в вашем выражении UPDATE или INSERT вы можете использовать это

column_name = IF (? = 'True', 1,0)

VALUES (IF (? = 'True', 1,0), ...)

не нужноизмените привязанное поле флажка на шаблон элемента или что-либо еще.

Я не уверен, имеет ли это значение, но я изменил свой тип параметра на Boolean и, поскольку у меня теперь он работает, я не хочу его менять.

0 голосов
/ 01 мая 2013

Это мое решение этой проблемы. Сначала я создал свой собственный компонент 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: '/>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...