This is a migrated thread and some comments may be shown as answers.

[Solved] Rebinding grid with Json object

0 Answers 38 Views
Grid
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Aleksandar
Top achievements
Rank 1
Aleksandar asked on 16 Apr 2011, 01:35 AM

I`m having problem with rebinding grid with Json object….

I`m trying to create custom delete button…

So far I have Jquery function: Gets an ID of selected column (username) and call controller action “UserDetails”

var id = "";
    function select(e) {
        var row = e.row;
        id = row.cells[1].innerHTML;
        $("#errorMessage").html("");
    }
//DELETE CLICK
$("#DeleteUser").click(function () {
        if (id != "") {
            var answer = confirm("Delete user " + id)
            if (answer) {
                $.ajax({
                    type: "POST",
                    url: "/Admin/UserDetails",
                    data: "deleteName=" + id,
                    success: function (data) {
                         
                    }
                });
            }
        } else {
            $("#errorMessage").html("First you must select user you want to delete!");
        }
    });

This is action controller  UserDetails(string startsWith, string deleteName)

[GridAction]
        public ActionResult UserDetails(string startsWith, string deleteName)
        {   // Custom search...
            if (!string.IsNullOrEmpty(startsWith))
            {
                return GetSearchUserResult(startsWith);
            }
            if (!string.IsNullOrEmpty(deleteName))
            {
                TblUserDetails user = db.TblUserDetails.Single(a => a.TblUser.userName == deleteName);
                try
                {
                    TblUser userToDelete = db.TblUser.Single(a => a.userId == user.TblUser.userId);
                    db.DeleteObject(user);
                    db.DeleteObject(userToDelete);
 
                    db.SaveChanges();
                    Membership.DeleteUser(deleteName);
 
                    List<UserDto> retModelData = new List<UserDto>();
                    //GetAllUsers() returns a List<UserDto> of users.
                    retModelData = GetAllUsers();
 
                    var model = new GridModel
                    {
                        Data = retModelData,
                        Total = GetAllUsers().Count()
                    };
                    return View(model);
                }
                catch
                {
                    return View(new GridModel());
                }
            }
 
            else
            {
                var user = GetAllUsers();
                return View(new GridModel(user));
            }
        }
So far everything is working OK. But can I bind my grid with these Json data and how???
This is my Json result that I want to bind with grid...
And here is my grid:
@(Html.Telerik().Grid<App.Web.Models.UserDto>()
    .Name("Grid")
    .DataKeys(key =>
    {
        key.Add(a => a.Id);
    })
    .Columns(column =>
    {
        column.Bound(a => a.Username).Filterable(false);
        column.Bound(a => a.FirstName).Filterable(false);
        column.Bound(a => a.LastName).Filterable(false);
        column.Bound(a => a.Email).Filterable(false);
    })
    .DetailView(detailView => detailView.ClientTemplate(
                    "<table id='DetailTable'><tbody><tr class='UserRow'><td class='Tbllable'><b>First name</b></td><td><#= FirstName #></td>"
                            + "<td></td><td></td>"
                            + "</tr><tr><td class='Tbllable'><b>Last name</b></td>"
                            + "<td><#= LastName #></td>"
                            + "<td id='Roles'></td><td id='Operations'></td>"
                            + "</tr><tr><td class='Tbllable'><b>Username</b></td><td><#= Username #></td></tr><tr><td class='Tbllable'><b>Address</b></td>"
                            + "<td><#= Address #></td></tr><tr><td class='Tbllable'><b>Email</b></td><td><#= Email #></td></tr><tr><td class='Tbllable'><b>Birth date</b></td>"
                            + "<td></td></tr><tr><td class='Tbllable'><b>Registration date</b></td><td></td></tr><tr><td class='Tbllable'><b>Phone number</b></td>"
                            + "<td><#= PhoneNumberHome #></td></tr><tr><td class='Tbllable'><b>Mobile number</b></td><td><#= PhoneNumberMobile #></td></tr></tbody></table>"
                    ))
    //.EnableCustomBinding(true)
    .DataBinding(bind => bind.Ajax().Select("UserDetails", "Admin", new { startsWith = ViewBag.startsWith }))
    .Pageable(paging =>
            paging.PageSize(12)
                  .Style(GridPagerStyles.NextPreviousAndInput)
                  .Position(GridPagerPosition.Bottom)
        )
    .ClientEvents(e => e
        .OnRowDataBound("Expand")
        .OnRowSelect("select")
        .OnLoad("replaceConfirmation")
    )
        .RowAction(row =>
        {
            if (row.Index == 0)
            {
                row.DetailRow.Expanded = true;
            }
        })
    .Editable(editing => editing.Mode(GridEditMode.PopUp))
    .Selectable()
    .Sortable()
)

Tags
Grid
Asked by
Aleksandar
Top achievements
Rank 1
Share this question
or