У меня есть Webgrid в движке бритвы, когда я выполняю функцию сетки Сетка выполняет обратную передачу на первую страницу - PullRequest
0 голосов
/ 21 марта 2012

У меня есть сетка в движке Razor.Когда я выполняю функцию редактирования, сетка возвращается к странице страницы, как я могу ограничить сетку, чтобы она оставалась на той же странице сетки, когда мы выполняем какую-либо функцию сетки?

1 Ответ

0 голосов
/ 04 апреля 2012

открытый класс PeopleListController: Controller {// пример источника данных public List Persons {get {return new List {new Person {ID = 1, Birthday = DateTime.Now, Name = "John"}, new Person {ID = 2, Birthday = DateTime.Now, Name = "Paul"}, новый Персона {ID = 3, Birthday = DateTime.Now, Name = "Jane"}, новый Person {ID = 4, Birthday = DateTime.Now, Name = "Триша "}, новый человек {ID = 5, день рождения = DateTime.Now, имя =" Кевин "}, новый человек {ID = 6, день рождения = DateTime.Now, имя =" Дженис "}, новый человек {ID = 7, Birthday = DateTime.Now, Name = "Dennis"}, новый Персона {ID = 8, Birthday = DateTime.Now, Name = "Jack"}, новый Person {ID = 9, Birthday = DateTime.Now, Name = "Тревор "}, новый человек {ID = 10, день рождения = DateTime.Now, имя =" Майкл "}, новый человек {ID = 11, день рождения = DateTime.Now, имя =" Шон "}, новый человек {ID = 12, Birthday = DateTime.Now, Name = "Emerson"}, новый Персона {ID = 13, Birthday = DateTime.Now, Name = "Jay"}, новый Person {ID = 14, Birthday = DateTime.Now, Name = "Генри "}, новый человек {ID = 15, день рождения = DateTime.Now, имя =" Люк "}};}}

    public ActionResult Index()
    {
        //get grid parameters from URL/POST (if any)
        var gridParameters = GridParameters.GetGridParameters();

        //get data
        var data = GetDataUsingLINQ(gridParameters.Sort,            //order by column
                                    gridParameters.SortDirection,   //order by direction
                                    gridParameters.Page ?? 1,       //returned page
                                    5);                             //displayed rows per page

        //set record count for use in view
        ViewBag.GridRecordCount = Persons.Count;

        return View(data);
    }

    //get data from datasource using LINQ (sample data access layer)
    private IEnumerable<Person> GetDataUsingLINQ(string sort, string sortDir, int page, int numRows)
    {
        if (!string.IsNullOrEmpty(sort))
            return Persons.AsQueryable().OrderBy(sort + " " + sortDir).Skip((page - 1) * numRows).Take(numRows).ToList();
        else
            return Persons.AsQueryable().Skip((page - 1) * numRows).Take(numRows).ToList();
    }

    //get data from datasource using SPROC (sample data access layer)
    private IEnumerable<Person> GetDataUsingSPROC(string sort, string sortDir, int? page, int numRows)
    {
        //note: I did not use EF nor LINQ to SQL in the example below as I do 
        //      not know any clean/elegant way of calling stored using those two

        //note: server side paging and sorting SP implementation is not included, there are lots of articles on the web that discuss about it.
        //      You can google "sql server side paging sorting"

        var sqlCon = new SqlConnection("<insert your connection string here>");
        sqlCon.Open();

        var sqlCmd = new SqlCommand();
        sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
        sqlCmd.CommandText = "<insert your SP name here>"; 
        sqlCmd.Connection = sqlCon;

        sqlCmd.Parameters.AddWithValue("@Sort", sort);
        sqlCmd.Parameters.AddWithValue("@SortDirection", sortDir);
        sqlCmd.Parameters.AddWithValue("@Page", page);
        sqlCmd.Parameters.AddWithValue("@NumRows", numRows);

        var list = new List<Person>();
        using(SqlDataReader reader = sqlCmd.ExecuteReader())
        {
            while (reader.Read())
            {
                var p = new Person();
                p.ID = Convert.ToInt32(reader["ID"]);
                p.Name = reader["Name"].ToString();
                p.Birthday = Convert.ToDateTime(reader["Birthday"]);
                list.Add(p);
            }
        }

        sqlCon.Close();

        return list;
    }

}

...