Может ли JQGrid работать с SignalR?
Ребята подскажите пожалуйста, что я делаю не так и будет ли вообще так работать? Есть проект ASP.Net MVC, на данный момент реализовано следующее:
HomeController
public JsonResult Get()
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SignalR"].ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(@"SELECT [DisplayName],[EmailAddress],[Title],[Department], [OfficePhone], [MobilePhone] FROM [dbo].[ADusers] WHERE [Enabled]>0 and [Company] = 'Рога и копыта'", connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
SqlDataReader reader = command.ExecuteReader();
var listCus = reader.Cast<IDataRecord>()
.Select(x => new
{
DisplayName = x["DisplayName"],
EmailAddress = x["EmailAddress"],
Title = x["Title"],
//Department = x["Department"],
OfficePhone = x["OfficePhone"],
MobilePhone = x["MobilePhone"]
}).ToList();
return Json(new { listCus = listCus }, JsonRequestBehavior.AllowGet);
}
}
}
Hub
public class ADHub : Hub
{
public static void Show()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ADHub>();
context.Clients.All.displayAD();
}
}
Index.chhtml
@Html.Hidden("Get", Url.Action("Get", "Home"))
<div id="pager">
<table id="example1" class="table table-bordered table-hover">
</table>
</div>
Подключение HUB
$(function () {
var cus = $.connection.aDHub;
cus.client.displayAD = function () {
getData();
};
$.connection.hub.start();
getData();
});
И заполнение JqGrid
function getData() {
$.ajax({
url: $("#Get").val(),
type: 'GET',
datatype: 'json',
success: function (data) {
jQuery("#example1").jqGrid({
data: data.listCus,
loadonce: true,
datatype: "local",
colNames: ['DisplayName', 'EmailAddress', 'Title', 'OfficePhone', 'MobilePhone'],
colModel: [
{ name: 'DisplayName', index: 'DisplayName', width: 55 },
{ name: 'EmailAddress', index: 'EmailAddress', width: 90 },
{ name: 'Title', index: 'Title', width: 100 },
{ name: 'OfficePhone', index: 'OfficePhone', width: 80, align: "right" },
{ name: 'MobilePhone', index: 'MobilePhone', width: 80, align: "right" }
],
rowNum: 1000,
scroll: true,
viewrecords: true,
width: window.innerWidth - 30,
height: window.innerHeight - 190,
altRows: true,
}).jqGrid("navGrid", "#pager", {
edit: false,
add: false,
del: false,
search: true,
refresh: false
}).jqGrid("gridResize");
}
});
}
Данные в грид грузятся, но при изменении в бд не обновляются. Но если делаю так:
function getData() {
var $tbl = $('#tblInfo');
$.ajax({
url: $("#Get").val(),
type: 'GET',
datatype: 'json',
success: function (data) {
$tbl.empty();
$.each(data.listCus, function (i, model) {
model.forEach(m => {
if (dept !== m.Department) {
dept = m.Department;
$tbl.append("<tr><th colspan='3'>" + dept + "</th></tr>");
}
$tbl.append('<tr><td>' + m.DisplayName + '</td>' +
'<td>' + m.EmailAddress + '</td>' +
'<td>' + m.Title + '</td></tr>'
);
});
});
}
});
}
ТО обновления отслеживаются. Не судите строго за нечитабельный код, я чайник