.NET - Editor - Checkboxes state
.NET - Editor - Checkboxes state
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
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
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
Hi Toni,
Thank you. The issue is that the values being sent back from the server don't match the option values - e.g.:
But:
Note that
1 !== 'False'
and1 !== '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 thecheckbox
field type - setting it to be'False'
.Allan
Allen you are the MVP.
Thanks a lot.