Telerik Forums
Kendo UI for jQuery Forum
1 answer
80 views
Hi,

We would like to do Instagram-like interface and have problem incorporating images with Listview.  We found out that ListView doesn't displayed correctly if we do not specify height of the image.  However, we cannot set image height for every devices.  Please advice. 
Petyo
Telerik team
 answered on 04 Mar 2014
1 answer
173 views
Hi,

I would like to make Instagram's grid-like interface.  Is it possible to do so using ListView?  

I have tried incorporating Endless Scroll and Pull to Refresh.  But the ListView has problem making it into grid interface.  

This is a piece of CSS that I am using:
ul#product-list > li {Width:50%; float:left;} 
Petyo
Telerik team
 answered on 04 Mar 2014
1 answer
53 views
All - we just had ran into an issue where the performance of row selection was painful in IE10+.  Looking on the forums, we saw that others have had issues with this and that it was "better" in the latest release.  The cause is apparently's IE's slow handling of the CSS ":not" selector.

We had to find a fix and believe we have traced it down to a problem in Kendo's code.  Basically, if you have a grid and you do NOT use Grouping or Footers, the code thinks you do and thus appends extra ":not" selectors to the CSS queries.  The fix for this assuming you DO NOT use grouping or footers is to set these templates to "".  The problem is Kendo does a !== "" check and if you don't define them and leave them undefined, it assumes you do have them.

Here is our code fix:

// Push the column info
columnInfo.push(
{
      // OMIT
      groupFooterTemplate: "",
       footerTemplate: ""

});

The offending code in Kendo is Line #26619 inside of _hasFooters


if (cols[j].footerTemplate !== "" || cols[j].groupFooterTemplate !== "") {
return true;
}


Hopefully this helps some.


Nikolay Rusev
Telerik team
 answered on 04 Mar 2014
4 answers
717 views
I have a KendoUI DataSource linked up to a WebApi 2 OData controller and am having problems with update operations. I can create and delete just fine.

When I make the call to sync the datasource to the server after making any updates I get a 400 error:

{
  "odata.error":{
    "code":"","message":{
      "lang":"en-US","value":"The request is invalid."
    },"innererror":{
      "message":"patch : Invalid JSON. A token was not recognized in the JSON content.\r\n","type":"","stacktrace":""
    }
  }
}


Debugging in Visual Studio shows that the patch function is being passed the Id but not the Company object. Firebug shows that the PATCH request looks like this when I change the title of "Test Company" to "Test Company test" and click save:

models=%7B%22Id%22%3A1026%2C%22Title%22%3A%22Test+Company+test%22%7D

I have a hunch there is something wonky about this that the server doesn't understand.

The model is simple and I left the controller as whatever VS generated for me:

Model:

01.public class Company {
02.    public Company() { }
03. 
04.    public Company(Company company) {
05.        this.Id = company.Id;
06.        this.Title = company.Title;
07.        this.Projects = company.Projects;
08.    }
09. 
10.    public int Id { get; set; }
11.    public string Title { get; set; }
12. 
13.    public virtual ICollection<Project> Projects { get; set; }
14.}


Controller:

001.public class CompanyController : ODataController
002.{
003.    private ApplicationDbContext db = new ApplicationDbContext();
004. 
005.    // GET odata/Company
006.    [Queryable]
007.    public IQueryable<Company> GetCompany()
008.    {
009.        return db.Companies;
010.    }
011. 
012.    // GET odata/Company(5)
013.    [Queryable]
014.    public SingleResult<Company> GetCompany([FromODataUri] int key)
015.    {
016.        return SingleResult.Create(db.Companies.Where(company => company.Id == key));
017.    }
018. 
019.    // PUT odata/Company(5)
020.    public async Task<IHttpActionResult> Put([FromODataUri] int key, Company company)
021.    {
022.        if (!ModelState.IsValid)
023.        {
024.            return BadRequest(ModelState);
025.        }
026. 
027.        if (key != company.Id)
028.        {
029.            return BadRequest();
030.        }
031. 
032.        db.Entry(company).State = EntityState.Modified;
033. 
034.        try
035.        {
036.            await db.SaveChangesAsync();
037.        }
038.        catch (DbUpdateConcurrencyException)
039.        {
040.            if (!CompanyExists(key))
041.            {
042.                return NotFound();
043.            }
044.            else
045.            {
046.                throw;
047.            }
048.        }
049. 
050.        return Updated(company);
051.    }
052. 
053.    // POST odata/Company
054.    public async Task<IHttpActionResult> Post(Company company)
055.    {
056.        if (!ModelState.IsValid)
057.        {
058.            return BadRequest(ModelState);
059.        }
060. 
061.        db.Companies.Add(company);
062.        await db.SaveChangesAsync();
063. 
064.        return Created(company);
065.    }
066. 
067.    // PATCH odata/Company(5)
068.    [AcceptVerbs("PATCH", "MERGE")]
069.    public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Company> patch)
070.    {
071.        if (!ModelState.IsValid)
072.        {
073.            return BadRequest(ModelState);
074.        }
075. 
076.        Company company = await db.Companies.FindAsync(key);
077.        if (company == null)
078.        {
079.            return NotFound();
080.        }
081. 
082.        patch.Patch(company);
083. 
084.        try
085.        {
086.            await db.SaveChangesAsync();
087.        }
088.        catch (DbUpdateConcurrencyException)
089.        {
090.            if (!CompanyExists(key))
091.            {
092.                return NotFound();
093.            }
094.            else
095.            {
096.                throw;
097.            }
098.        }
099. 
100.        return Updated(company);
101.    }
102. 
103.    // DELETE odata/Company(5)
104.    public async Task<IHttpActionResult> Delete([FromODataUri] int key)
105.    {
106.        Company company = await db.Companies.FindAsync(key);
107.        if (company == null)
108.        {
109.            return NotFound();
110.        }
111. 
112.        db.Companies.Remove(company);
113.        await db.SaveChangesAsync();
114. 
115.        return StatusCode(HttpStatusCode.NoContent);
116.    }
117. 
118.    // GET odata/Company(5)/Projects
119.    [Queryable]
120.    public IQueryable<Project> GetProjects([FromODataUri] int key)
121.    {
122.        return db.Companies.Where(m => m.Id == key).SelectMany(m => m.Projects);
123.    }
124. 
125.    protected override void Dispose(bool disposing)
126.    {
127.        if (disposing)
128.        {
129.            db.Dispose();
130.        }
131.        base.Dispose(disposing);
132.    }
133. 
134.    private bool CompanyExists(int key)
135.    {
136.        return db.Companies.Count(e => e.Id == key) > 0;
137.    }
138.}

Finally, the KendoUI, HTML/Javascript is this:

001.<h2>Company List</h2>
002. 
003.<div id="company-data">
004.    <div class="col-md-3 col-sm-5 col-xs-5">
005.        <div id="company-list" style="padding: 0px; height: 500px; overflow: auto" data-role="listview" data-template="list-template" data-bind="source: companies, events: {change: OnSelect}" data-selectable="true"></div>
006.        <div>
007.            <button class="btn btn-success btn-sm" id="btn-add-company"><span class="glyphicon glyphicon-plus"></span> Add</button>
008.            <button class="btn btn-danger btn-sm" id="btn-delete-company" data-bind="visible: hasSelection, click: deleteSelection"><span class="glyphicon glyphicon-remove"></span> Delete</button>
009.            <button class="btn btn-default btn-sm" id="btn-clear-company" data-bind="visible: hasSelection, click: clearSelection"><span class="glyphicon glyphicon-ban-circle"></span> Clear</button>
010.            <button class="btn btn-primary btn-sm btn-block" id="btn-save" data-bind="visible: hasChanges, click: saveChanges"><span class="glyphicon glyphicon-cloud-upload"></span> Save All</button>
011.        </div>
012.    </div>
013.    <div class="col-md-9 col-sm-7 col-xs-7" data-bind="visible: hasSelection">
014.        <label for="company-title">Title:</label><br />
015.        <input id="company-title" data-bind="value: selectedItem.Title" ><br />
016.    </div>
017.</div>
018. 
019.<script type="text/x-kendo-template" id="list-template">
020.    <div class="company" style="cursor: pointer">
021.        <span data-bind="text: Title"></span>
022.    </div>
023.</script>
024. 
025.<script>
026.    $(function () {
027.        var firstSync = true;
028.        var companyVM = new kendo.observable({
029.            // Data Source.
030.            companies: new kendo.data.DataSource({
031.                type: 'odata',
032.                transport: {
033.                    create: {
034.                        url: '/odata/Company',
035.                        dataType: 'json',
036.                        type: 'POST'
037.                    },
038.                    read: {
039.                        url: '/odata/Company',
040.                        dataType: 'json'
041.                    },
042.                    update: {
043.                        url: function (data) {
044.                            return '/odata/Company(' + data.Id + ')';
045.                        },
046.                        dataType: 'json',
047.                        type: 'PATCH'
048.                    },
049.                    destroy: {
050.                        url: function (data) {
051.                            return '/odata/Company(' + data.Id + ')';
052.                        },
053.                        dataType: 'json',
054.                        type: 'DELETE'
055.                    },
056.                    parameterMap: function (options, operation) {
057.                        if (operation !== "read" && options) {
058.                            console.log(operation + '*: ' + kendo.stringify(options));
059.                            return {
060.                                models: kendo.stringify(options)
061.                            };
062.                        }
063.                        console.log(operation + ': ' + kendo.stringify(options));
064.                        return options;
065.                    }
066.                },
067.                schema: {
068.                    data: function (data) {
069.                        return data['value'];
070.                    },
071.                    total: function (data) {
072.                        return data['odata.count'];
073.                    },
074.                    model: {
075.                        id: 'Id',
076.                        fields: {
077.                            Title: { type: 'string' }
078.                        }
079.                    }
080.                },
081.                change: function () {
082.                    // We don't want to fire the first time the data loads because that counts as changed.
083.                    if (!firstSync)
084.                        companyVM.set('hasChanges', true);
085.                    else
086.                        firstSync = false;
087.                }
088.            }),
089. 
090.            // Properties.
091.            selectedItem: null,
092.            hasSelection: function () {
093.                return this.get('selectedItem') != null;
094.            },
095.            hasChanges: false,
096. 
097.            // Functions.
098.            clearSelection: function() {
099.                this.set('selectedItem', null);
100.                $('#company-list').getKendoListView().clearSelection();
101.            },
102.            saveChanges: function() {
103.                this.companies.sync();
104.                this.set('hasChanges', false);
105.            },
106.            deleteSelection: function () {
107.                if (confirm('Warning, deletion is permanent! Are you sure you wish to delete this item?')) {
108.                    this.companies.remove(this.selectedItem);
109.                    this.set('hasChanges', true);
110.                    this.clearSelection();
111.                }
112.            },
113. 
114.            // Events.
115.            OnSelect: function (e) {
116.                var list = $(e.sender.element).getKendoListView();
117.                var row = list.select();
118.                var item = list.dataSource.getByUid(row.data('uid'));
119. 
120.                this.set('selectedItem', item);
121.            }
122.        });
123. 
124.        kendo.bind($('#company-data'), companyVM);
125.    });
126.</script>
Atanas Korchev
Telerik team
 answered on 04 Mar 2014
3 answers
555 views
Hi ,

I have a grid which is binded to list<objects> lets say "List<employee> "

Now I want to have a property in viewmodel like "SelectedEmployee"

How can i bind or configure this?
If i select a row in html page it should fill selected employee?

Thanks,
Mahesh Gupta
Atanas Korchev
Telerik team
 answered on 04 Mar 2014
1 answer
233 views
When we add some record, its arrow key (<<  <  >  >>) paging is not working properly. But Number paging is (1,2,3,4,5)working properly.
How to make it correct? Can you please help me as soon as possible.

Function to show data.

var diagnosticDataSource = null;
var template = kendo.template($("#diagnosticRowTemplate").html());


var diagnosticGrid;

diagnosticDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: "/ControllerName/Action",
            dataType: "json",
        }
    },
    pageSize: 10
});

function ShowDiagnostics() {
    diagnosticDataSource.read();
    var columns = [
        { title: "DiagnosticBuilderID", field: "DiagnosticBuilderID", hidden: true, type: "number", filterable: false },
        { title: "Template Name", field: "TemplateName", hidden: false, type: "string", filterable: false },
        { title: "Target", field: "Target", hidden: false, type: "string", filterable: false },
        { title: "No. of Questions", field: "NumberOfQuestions", hidden: false, type: "number", filterable: false },
        { title: "Action", field: "", hidden: false, type: "string", filterable: false }

    ];

    diagnosticGrid = $("#tblDiagnostics").kendoGridAcademy({
        columns: columns,
        dataSource: diagnosticDataSource,
        rowTemplate: kendo.template($("#diagnosticRowTemplate").html()),
        filterable: true,
        pageable: true,
        serverPaging: true,
        serverFiltering: true,
        serverSorting: true
    });
    $(diagnosticGrid).refresh();
}
Atanas Korchev
Telerik team
 answered on 04 Mar 2014
3 answers
289 views
Hello,

When draggable element is inside Window widget, then it drags before the window for first 3 times only. Starting from 4th drag-and-drop operation, it drags behind the Window widget. Have a look at the sample code:

<body>
    <div id="windowTest" >
        <div id="divToDrag" style="width:50px;height:50px;background:yellow;" ></div>
    </div>
 
    <script>
        $(document).ready(function () {          
            $("#windowTest").kendoWindow({
                width: "200px",
                height: "100px"
            });
 
            $("#divToDrag").kendoDraggable({
                hint: function (element) {
                    return element.clone();
                }
            });
        });
    </script>
</body>


The problem cause is the following: the dragging element z-index is 10010, but the Window z-index increases from 10003 by 2 every time the drag started. So, for the first drag-and-drop operations, the Window z-index is 10005, 10007, 1009. For the 4th drag-and-drop the z-index became 10011, and the dragging element drags behind the Window.

Can you please suggest me how to fix this problem?

Thanks,
  Sergey
Alex Gyoshev
Telerik team
 answered on 04 Mar 2014
4 answers
164 views
Hi,

Will KendoUI Mobile widgets work on webkit desktop browsers ? It would be more easier to debug a KendoUI mobile application if it works on these browsers (I tried a simple application with Google Chrome but the UI doesn't work at all).

Cordially,
Kakone.
Petyo
Telerik team
 answered on 04 Mar 2014
1 answer
272 views

http://stackoverflow.com/questions/22156602/angular-kendo-treeview-checkbox-change-event-firing-multiple-times


I am trying to implement the checkbox change event using angular but seeing the event firing multiple times when a checkbox is clicked.I have created a plnkr for this, please help. Ideally it should be fired only once.


$scope.treeOptions = {
checkboxes: {
checkChildren: true
},
dataBound: function(e) {
$scope.attachChangeEvent(e);

}

};Event change code: $scope.attachChangeEvent = function(e) {

var dataSource = e.sender.dataSource;
// issue : change event is getting called multiple times for every click on checkbox
dataSource.bind("change", function(e) {
var selectedNodes = 0;

var checkedNodes = [];

$scope.checkedNodeIds(dataSource.view(), checkedNodes);


for (var i = 0; i < checkedNodes.length; i++) {
var nd = checkedNodes[i];
if (nd.checked) {
selectedNodes++;
}
}
// check the console - this is called multiple times for one checkbox click
console.log(selectedNodes);
});
};
Atanas Korchev
Telerik team
 answered on 04 Mar 2014
7 answers
232 views
We've problem putting scroller view and endless scrolling on the same page. The last item of the endless list seems to be hidden beneath the viewport. The problem seems to be solved when we remove the scroller view.

Is there anyway to put Scroller view and endless scrolling on the same page. Thanks
Kiril Nikolov
Telerik team
 answered on 04 Mar 2014
Narrow your results
Selected tags
Tags
Grid
General Discussions
Charts
Data Source
Scheduler
DropDownList
TreeView
MVVM
Editor
Window
DatePicker
Spreadsheet
Upload
ListView (Mobile)
ComboBox
TabStrip
MultiSelect
AutoComplete
ListView
Menu
Templates
Gantt
Validation
TreeList
Diagram
NumericTextBox
Splitter
PanelBar
Application
Map
Drag and Drop
ToolTip
Calendar
PivotGrid
ScrollView (Mobile)
Toolbar
TabStrip (Mobile)
Slider
Button (Mobile)
Filter
SPA
Drawing API
Drawer (Mobile)
Globalization
LinearGauge
Sortable
ModalView
Hierarchical Data Source
Button
FileManager
MaskedTextBox
View
Form
NavBar
Notification
Switch (Mobile)
SplitView
ListBox
DropDownTree
PDFViewer
Sparkline
ActionSheet
TileLayout
PopOver (Mobile)
TreeMap
ButtonGroup
ColorPicker
Pager
Styling
MultiColumnComboBox
Chat
DateRangePicker
Dialog
Checkbox
Timeline
Drawer
DateInput
ProgressBar
MediaPlayer
ImageEditor
TextBox
OrgChart
Effects
Accessibility
PivotGridV2
ScrollView
BulletChart
Licensing
QRCode
ResponsivePanel
Switch
Wizard
CheckBoxGroup
TextArea
Barcode
Breadcrumb
Collapsible
Localization
MultiViewCalendar
Touch
RadioButton
Stepper
Card
ExpansionPanel
Rating
RadioGroup
Badge
Captcha
Heatmap
AppBar
Loader
Security
TaskBoard
Popover
DockManager
FloatingActionButton
CircularGauge
ColorGradient
ColorPalette
DropDownButton
TimeDurationPicker
ToggleButton
TimePicker
BottomNavigation
Ripple
SkeletonContainer
Avatar
Circular ProgressBar
FlatColorPicker
SplitButton
Signature
Chip
ChipList
VS Code Extension
AIPrompt
PropertyGrid
Sankey
Chart Wizard
OTP Input
SpeechToTextButton
InlineAIPrompt
StockChart
ContextMenu
DateTimePicker
RadialGauge
ArcGauge
AICodingAssistant
+? more
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?