Здесь приведен практический пример вложенного класса, который может дать вам представление об их использовании (добавлен некоторый модульный тест)
namespace CoreLib.Helpers
{
using System;
using System.Security.Cryptography;
public static class Rnd
{
private static readonly Random _random = new Random();
public static Random Generator { get { return _random; } }
static Rnd()
{
}
public static class Crypto
{
private static readonly RandomNumberGenerator _highRandom = RandomNumberGenerator.Create();
public static RandomNumberGenerator Generator { get { return _highRandom; } }
static Crypto()
{
}
}
public static UInt32 Next(this RandomNumberGenerator value)
{
var bytes = new byte[4];
value.GetBytes(bytes);
return BitConverter.ToUInt32(bytes, 0);
}
}
}
[TestMethod]
public void Rnd_OnGenerator_UniqueRandomSequence()
{
var rdn1 = Rnd.Generator;
var rdn2 = Rnd.Generator;
var list = new List<Int32>();
var tasks = new Task[10];
for (var i = 0; i < 10; i++)
{
tasks[i] = Task.Factory.StartNew((() =>
{
for (var k = 0; k < 1000; k++)
{
lock (list)
{
list.Add(Rnd.Generator.Next(Int32.MinValue, Int32.MaxValue));
}
}
}));
}
Task.WaitAll(tasks);
var distinct = list.Distinct().ToList();
Assert.AreSame(rdn1, rdn2);
Assert.AreEqual(10000, list.Count);
Assert.AreEqual(list.Count, distinct.Count);
}
[TestMethod]
public void Rnd_OnCryptoGenerator_UniqueRandomSequence()
{
var rdn1 = Rnd.Crypto.Generator;
var rdn2 = Rnd.Crypto.Generator;
var list = new ConcurrentQueue<UInt32>();
var tasks = new Task[10];
for (var i = 0; i < 10; i++)
{
tasks[i] = Task.Factory.StartNew((() =>
{
for (var k = 0; k < 1000; k++)
{
list.Enqueue(Rnd.Crypto.Generator.Next());
}
}));
}
Task.WaitAll(tasks);
var distinct = list.Distinct().ToList();
Assert.AreSame(rdn1, rdn2);
Assert.AreEqual(10000, list.Count);
Assert.AreEqual(list.Count, distinct.Count);
}
jQuery("#myGrid").jqGrid('getGridParam', 'records');
Обновление
Обратите внимание, что есть два параметра для определения количества записей:
записи
целое число
Свойство только для чтения. Дает количество записей, возвращенных в результате запроса к серверу.
reccount
integer
Свойство Readonly. Определяет точное количество строк в сетке. Не путайте это с параметром
записей
. Хотя во многих случаях они могут быть равными, есть случаи, когда это не так. Например, если вы определяете rowNum равным 15, но запрос к серверу возвращает 20 записей, параметр records будет равен 20, но параметр reccount будет равен 15 (в сетке будет 15 записей, а не 20).
Как насчет этого?
jQuery("#myGrid tr").length;
На самом деле, вы можете сделать еще один шаг с дополнительным параметром контекста.
jQuery("tr", "#myGrid").length;
Любой из них будет искать каждый "tr" внутри "#myGrid" . Однако, судя по моему собственному тестированию, определение параметра контекста обычно выполняется быстрее.
Вот код, который у меня есть. Похоже, должен быть способ получше:
jQuery("#myGrid").getDataIDs().length;