.NET - Editor - Checkboxes state

.NET - Editor - Checkboxes state

johann_maderjohann_mader Posts: 15Questions: 1Answers: 0

Dear all,

I have a problem with the Editor and checkboxes. I want to use multiple checkbox fields in the editor, they all show up but they aren't set like the database values (integer). 0 for off and 1 for on.

Setting those values in the datatable itself works while setting it in the rowCallback:

// Set the checked state of the checkbox in the table
$('input.editor-material', row).prop('checked', data.BW_LIEF_MODULE.kennz_material == "True");
$('input.editor-arbeitskleidung', row).prop('checked', data.BW_LIEF_MODULE.kennz_arbeitskleidung == "True");
$('input.editor-transporte', row).prop('checked', data.BW_LIEF_MODULE.kennz_transporte == "True");
$('input.editor-zeitarbeiter', row).prop('checked', data.BW_LIEF_MODULE.kennz_zeitarbeiter == "True");
$('input.editor-flug_hotel', row).prop('checked', data.BW_LIEF_MODULE.kennz_flug_hotel == "True");
$('input.editor-fuhrpark', row).prop('checked', data.BW_LIEF_MODULE.kennz_fuhrpark == "True");
$('input.editor-seminar', row).prop('checked', data.BW_LIEF_MODULE.kennz_seminar == "True");
$('input.editor-geschenke', row).prop('checked', data.BW_LIEF_MODULE.kennz_geschenke == "True");

Before getting into deep syntax... am I suppose to set those checkboxes for the Editor manually, too?

Editor js

var editor = new $.fn.dataTable.Editor( {
    ajax: "/api/BW_LIEF_MODULE",
    table: "#BW_LIEF_MODULE",
    fields: [
        {
            label: "Lieferant:",
            name: "lief.lieferant_bezeichnung",
            type: "readonly"
        },
        {
            label: "Material & sonstige DL:",
            name: "BW_LIEF_MODULE.kennz_material",
            type: "checkbox",
            separator: ",",
            unselectedValue : 0,
            options: [
                { label: "", value: 1 }
            ]
        },
        {
            label: "Arbeitskleidung:",
            name: "BW_LIEF_MODULE.kennz_arbeitskleidung",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]
        },
        {
            label: "Transport:",
            name: "BW_LIEF_MODULE.kennz_transporte",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]
        },
        {
            label: "Zeitarbeiter:",
            name: "BW_LIEF_MODULE.kennz_zeitarbeiter",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]
        },
        {
            label: "Flüge & Hotel:",
            name: "BW_LIEF_MODULE.kennz_flug_hotel",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]
        },
        {
            label: "Fuhrpark:",
            name: "BW_LIEF_MODULE.kennz_fuhrpark",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]
        },
        {
            label: "Seminare/Schulungen:",
            name: "BW_LIEF_MODULE.kennz_seminar",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]

        },
        {
            label: "Geschenke:",
            name: "BW_LIEF_MODULE.kennz_geschenke",
            type: "checkbox",
            separator: ",",
            unselectedValue: 0,
            options: [
                { label: "", value: 1 }
            ]
        }
    ]
} );

Editor Controller

using System.Web;
using System.Web.Http;
using DataTables;
using System;

namespace JM.ASP.Bestellwesenv2.Controllers
{
    public class LieferantModuleController : ApiController
    {
        [Route("api/BW_LIEF_MODULE")]
        [HttpGet]
        [HttpPost]

        public IHttpActionResult LieferantModul()
        {
            var request = HttpContext.Current.Request;
            var settings = Properties.Settings.Default;

            using (var db = new Database(settings.DbType, settings.DbConnection))
            {
                // The following statement can be removed after the first run
                // (i.e. the database table has been created). It is a good idea
                // to do this to help improve performance.
                db.Sql(@"IF object_id("BW_LIEF_MODULE", "U") is null
                    CREATE TABLE BW_LIEF (
                        [pk_liefmodul_id] int not null identity,
                        [fk_lieferant_id] integer,
                        [kennz_material] integer,
                        [kennz_arbeitskleidung] integer,
                        [kennz_transporte] integer,
                        [kennz_zeitarbeiter] integer,
                        [kennz_flug_hotel] integer,
                        [kennz_fuhrpark] integer,
                        [kennz_seminar] integer,
                        [kennz_geschenke] integer,
                        PRIMARY KEY( [pk_liefmodul_id] )
                    );");

                int result;

                var response = new Editor(db, "BW_LIEF_MODULE", "pk_liefmodul_id")
                    .Field(new Field("lief.lieferant_bezeichnung"))
                    .Field(new Field("BW_LIEF_MODULE.kennz_material")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_arbeitskleidung")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_transporte")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_zeitarbeiter")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_flug_hotel")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_fuhrpark")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_seminar")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .Field(new Field("BW_LIEF_MODULE.kennz_geschenke")
                    .GetFormatter(Format.IfEmpty(0))
                    .SetFormatter((val, data) => Int32.TryParse(val.ToString(), out result) == false ? 0 : Int32.Parse(val.ToString())))
                    .LeftJoin("BW_LIEF as lief", "lief.pk_lief_id", "=", "BW_LIEF_MODULE.fk_lieferant_id")
                    .Process(request)
                    .Data();

                return Json(response);
            }

        }
    }
}

Thanks in advance to any help!
Cheers Toni

This question has an accepted answers - jump to answer

Answers

  • allanallan Posts: 63,893Questions: 1Answers: 10,531 Site admin

    Hi Toni,

    Could you run the DataTables debugger and let me know what the debug URL it generates is so I can take a look at the data being used to populate the table.

    Allan

  • johann_maderjohann_mader Posts: 15Questions: 1Answers: 0
    edited July 2017

    Hi Allan,

    Thank your for the response.
    Here is your debug-url: http://debug.datatables.net/eyodav

    BTW: I installed the new Editor - i don't know why it is showing version 1.6.1.

    Thanks in advance,
    Toni

  • allanallan Posts: 63,893Questions: 1Answers: 10,531 Site admin
    Answer ✓

    Hi Toni,

    Thank you. The issue is that the values being sent back from the server don't match the option values - e.g.:

    "kennz_material": "False"
    "kennz_material": "True",

    But:

    { label: "", value: 1 }
    

    Note that 1 !== 'False' and 1 !== 'True'.

    If you set the value to be 'True' (note that it is a string) then it should work.

    You might also want to use the unselectedValue option of the checkbox field type - setting it to be 'False'.

    Allan

  • johann_maderjohann_mader Posts: 15Questions: 1Answers: 0

    Allen you are the MVP.

    Thanks a lot. :)

This discussion has been closed.