jqwidgets-scripts-custom
Version:
jQWidgets is an advanced jQuery, Angular 7, Vue, React, ASP .NET MVC, Custom Elements and HTML5 UI framework.
277 lines (248 loc) • 15.1 kB
HTML
<html lang="en">
<head>
<title id='Description'>Grid Custom Element EverPresentRowWithCustomWidgets</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1" />
<meta name="description" content="This is an example of Custom Element Grid's customizable fields and ever present rows." />
<link rel="stylesheet" href="../../../jqwidgets/styles/jqx.base.css" type="text/css" />
<link rel="stylesheet" href="../../../styles/demos.css" type="text/css" />
<script type="text/javascript" src="../../../scripts/webcomponents-lite.min.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxcore.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxcore.elements.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxdata.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxbuttons.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxscrollbar.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxlistbox.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxdropdownlist.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxmenu.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxinput.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxgrid.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxgrid.filter.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxgrid.sort.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxgrid.selection.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxgrid.edit.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxgrid.columnsresize.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxpanel.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxcalendar.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxradiobutton.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxnumberinput.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxdatetimeinput.js"></script>
<script type="text/javascript" src="../../../jqwidgets/jqxcheckbox.js"></script>
<script type="text/javascript" src="../../../jqwidgets/globalization/globalize.js"></script>
<script type="text/javascript" src="../../../scripts/demos.js"></script>
<script type="text/javascript" src="../../sampledata/generatedata.js"></script>
<script type="text/javascript">
var source =
{
localdata: generatedata(20),
datafields:
[
{ name: 'name', type: 'string' },
{ name: 'productname', type: 'string' },
{ name: 'available', type: 'bool' },
{ name: 'date', type: 'date' },
{ name: 'quantity', type: 'number' }
],
datatype: 'array'
};
var dataAdapter = new jqx.dataAdapter(source);
var getSourceAdapter = function(name) {
var source =
{
localdata: generatedata(20),
datafields:
[
{ name: 'name', type: 'string' },
{ name: 'productname', type: 'string' }
],
datatype: 'array'
};
var fields = new Array();
fields.push(name);
var dataAdapter = new jqx.dataAdapter(source, { autoBind: true, autoSort: true, uniqueDataFields: fields, autoSortField: name });
return dataAdapter.records;
}
window.onload = function() {
var myGrid = document.createElement('jqx-grid');
var nameInput;
var productDropDownList;
var shipDateDateTimeInput;
var quantityNumberInput;
myGrid.settings =
{
filterable: true,
source: dataAdapter,
showeverpresentrow: true,
everpresentrowposition: "top",
editable: true,
everpresentrowactionsmode: "columns",
columns: [
{
text: 'Name', columntype: 'textbox', filtertype: 'input', datafield: 'name', width: 215,
createEverPresentRowWidget: function (datafield, htmlElement, popup, addCallback) {
nameInput = document.createElement('jqx-input');
nameInput.style.border = 'none';
nameInput.setAttribute('delayed-create', true);
nameInput.settings =
{
popupZIndex: 99999999,
placeHolder: "Enter Name: ",
source: getSourceAdapter("name"),
displayMember: 'name'
};
htmlElement[0].appendChild(nameInput);
document.addEventListener('keydown', function(event) {
if (event.keyCode == 13) {
if (event.target === nameInput.children[0]) {
addCallback();
}
}
});
nameInput.attachedCallback();
nameInput.createElement();
return nameInput.widget;
},
initEverPresentRowWidget: function (datafield, htmlElement) { },
validateEverPresentRowWidgetValue: function (datafield, value, rowValues) {
if (!value || (value && value.length < 5)) {
return { message: "Entered value should be more than 5 characters", result: false };
}
return true;
},
getEverPresentRowWidgetValue: function(datafield, htmlElement, validate) {
return nameInput.val();
},
resetEverPresentRowWidgetValue: function (datafield, htmlElement) {
nameInput.val('');
}
},
{
text: 'Product', filtertype: 'checkedlist', datafield: 'productname', width: 220,
createEverPresentRowWidget: function(datafield, htmlElement, popup, addCallback) {
productDropDownList = document.createElement('jqx-drop-down-list');
productDropDownList.style.border = 'none';
productDropDownList.setAttribute('delayed-create', true);
productDropDownList.settings =
{
width: '100%', height: 30, popupZIndex: 99999999,
placeHolder: "Enter Product: ", displayMember: 'productname',
source: getSourceAdapter("productname")
};
htmlElement[0].appendChild(productDropDownList);
document.addEventListener('keydown', function(event) {
if (event.keyCode == 13) {
if (event.target === productDropDownList.children[0]) {
addCallback();
}
}
});
productDropDownList.attachedCallback();
productDropDownList.createElement();
return productDropDownList.widget;
},
getEverPresentRowWidgetValue: function (datafield, htmlElement, validate) {
var selectedItem = productDropDownList.getSelectedItem();
if (!selectedItem)
return "";
return selectedItem.label;
},
resetEverPresentRowWidgetValue: function(datafield, htmlElement) {
productDropDownList.clearSelection();
}
},
{
text: 'Ship Date', datafield: 'date', filtertype: 'range', width: 210, cellsalign: 'right', cellsformat: 'd',
createEverPresentRowWidget: function(datafield, htmlElement, popup, addCallback) {
shipDateDateTimeInput = document.createElement('jqx-date-time-input');
shipDateDateTimeInput.style.border = 'none';
shipDateDateTimeInput.setAttribute('delayed-create', true);
shipDateDateTimeInput.settings =
{
width: '100%', value: null,
popupZIndex: 99999999, placeHolder: "Enter Date: "
};
htmlElement[0].appendChild(shipDateDateTimeInput);
document.addEventListener('keydown', function(event) {
if (event.keyCode == 13) {
if (event.target === shipDateDateTimeInput.children[0]) {
addCallback();
}
}
});
shipDateDateTimeInput.attachedCallback();
shipDateDateTimeInput.createElement();
return shipDateDateTimeInput.widget;
},
initEverPresentRowWidget: function(datafield, htmlElement){},
getEverPresentRowWidgetValue: function(datafield, htmlElement, validate) {
return shipDateDateTimeInput.val();
},
resetEverPresentRowWidgetValue: function(datafield, htmlElement) {
shipDateDateTimeInput.val(null);
}
},
{
text: 'Qty.', datafield: 'quantity', filtertype: 'number', cellsalign: 'right',
createEverPresentRowWidget: function(datafield, htmlElement, popup, addCallback) {
quantityNumberInput = document.createElement('jqx-number-input');
quantityNumberInput.style.border = 'none';
quantityNumberInput.setAttribute('delayed-create', true);
quantityNumberInput.settings =
{
width: '100%',
inputMode: 'simple', decimalDigits: 0
};
htmlElement[0].appendChild(quantityNumberInput);
document.addEventListener('keydown', function(event) {
if (event.keyCode == 13) {
if (event.target === quantityNumberInput.children[0]) {
addCallback();
}
}
});
quantityNumberInput.attachedCallback();
quantityNumberInput.createElement();
return quantityNumberInput.widget;
},
initEverPresentRowWidget: function(datafield, htmlElement) {},
validateEverPresentRowWidgetValue: function(datafield, value, rowValues) {
if (parseInt(value) < 0) {
return { message: "Entered value should be positive number", result: false };
}
return true;
},
getEverPresentRowWidgetValue: function (datafield, htmlElement, validate) {
var value = quantityNumberInput.val();
if (value == "") value = 0;
return parseInt(value);
},
resetEverPresentRowWidgetValue: function(datafield, htmlElement) {
quantityNumberInput.val("");
}
},
{ text: '', datafield: 'addButtonColumn', width: 50 },
{ text: '', datafield: 'resetButtonColumn', width: 50 }
]
};
document.querySelector('#gridContainer').appendChild(myGrid);
var myRadioButtons = document.querySelectorAll('jqx-radio-button');
myRadioButtons[0].addEventListener('checked', function() {
myGrid.everpresentrowactions = 'add reset';
});
myRadioButtons[1].addEventListener('checked', function() {
myGrid.everpresentrowactions = 'addBottom reset';
});
};
</script>
</head>
<body>
<div class="example-description">
The sample shows how to customize fields in the ever present row. The first Text Field in the ever present row is disabled.
</div>
<div id="gridContainer"></div>
<br />
<jqx-radio-button checked="true">Add New Row to Top</jqx-radio-button>
<jqx-radio-button>Add New Row to Bottom</jqx-radio-button>
</body>
</html>