2013-11-08 2 views
0

Я хочу, чтобы создать динамическую сетку, которая автоматически создает dynamically.Iam колонки с помощью WebAPI для возврата результатапреобразование строки в JSon посылать результат кендо Ui сетки с

public dynamic SqlDataReaderToExpando(System.Data.Common.DbDataReader reader) 
     { 
      var expandoObject = new ExpandoObject() as IDictionary<string, object>; 

      for (var i = 0; i < reader.FieldCount; i++) 
       expandoObject.Add(reader.GetName(i), reader[i]); 

      return expandoObject; 
     } 

     public IEnumerable<dynamic> GetDynamicSqlData() 
     { 

      using (var cps = new CPS.Entities.CPSContext()) 
      { 
       using (var cmd = cps.Database.Connection.CreateCommand()) 
       { 
        cps.Database.Connection.Open(); 
        cmd.CommandText = "dbo.SP_CPSPortalModuleRoles"; 
        cmd.CommandType = System.Data.CommandType.StoredProcedure; 
        System.Data.SqlClient.SqlParameter param = new  System.Data.SqlClient.SqlParameter(); 
        param.Value = Guid.Empty; 
        param.ParameterName = "ModuleId"; 
        cmd.Parameters.Add(param); 

        using (var reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess))  //System.Data.CommandBehavior.SequentialAccess 
        { 
         while (reader.Read()) 
         { 
          yield return SqlDataReaderToExpando(reader); 
         } 
        } 
       } 
      } 
     } 

     public HttpResponseMessage GetRoleDetail() 
     { 
      HttpResponseMessage response = new HttpResponseMessage(); 
      try 
      { 

       RoleItem collSelect = new RoleItem(); 

       IEnumerable<dynamic> collItem = null; 
       collItem = GetDynamicSqlData().ToList(); 

       collSelect.Item = collItem; 
       JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); 
       javaScriptSerializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJsonConverter() }); 
       string jsonOfTest = javaScriptSerializer.Serialize(collSelect); 

       response.Content = new ObjectContent<string>(jsonOfTest, new JsonMediaTypeFormatter(), Mime.AppJson); 
       response.StatusCode = HttpStatusCode.OK; 

      } 
      catch (Exception ex) 
      { 
       response.StatusCode = HttpStatusCode.ExpectationFailed; 
       response.Headers.Add(Verb.ExceptionMessage, ex.Message.ToResponseString()); 
       response.Headers.Add(Verb.ExceptionStackTrace, ex.StackTrace.ToResponseString()); 
      } 

      return response; 
     } 

Здесь я получаю всю сетку данные, которые должны отображаться динамически из хранимой процедуры.

Это как прокси-слой, где я получаю данные от службы, как это.

 public String GetRoleMappings() 
     { 
      RoleItem collection = null; 
      string data1 = ""; 
      try 
      { 
       using (HttpClient httpClient = new HttpClient()) 
       { 
        Task<HttpResponseMessage> tskResponse = (httpClient.GetAsync(uri + @"/GetRoleDetail/")); 

        if (!tskResponse.IsFaulted) 
        { 
         HttpResponseMessage response = tskResponse.Result; 
         response.EnsureSuccessStatusCode(); 

         string data = response.Content.ReadAsStringAsync().Result;       
         data1 = JsonConvert.DeserializeObject<string>(data, ServiceUtility.JsonSettings); 

         string data2 = JsonConvert.DeserializeObject<string>(data1, ServiceUtility.JsonSettings); 

        } 
       } 
      } 
      catch (Exception ex) 
      { 
       logger.LogError(ex); 
      } 

      return data1; 
     } 

Это вернулся в мой контроллер клиента, где я хочу, чтобы бросить эти данные в моей Кендо UI сетки как Json, здесь IAM получать как строковые данные, но хотите, чтобы разобрать в JSON без сериализации.

public ActionResult GetRoleMapping([DataSourceRequest] DataSourceRequest request) 
     { 

      JsonResult jsonResult = null; 
      string s = objService.GetRoleMappings(); 

      //JsonResult jsonResult = null; 
      //jsonResult = Json(objModel.Item.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
      //var subItems = _subItems.Where(o => o.ItemId == itemId); 
      //DataSourceResult result = objModel.ToDataSourceResult(request); 
      //return s; 
      return Content(s); 
      //return new stringContent((s, "application/json"); 
      //return Json(jsonResult); 
     } 

Plz помогите мне с предложением. Мне нужно использовать хранимую процедуру. Заранее спасибо,

+0

Использование json похоже, что вы хотите добавить столбцы «на лету» с точки зрения. Помните, что после создания представления все помощники исчезли. В этот момент у вас есть html. Вам нужно будет использовать вызов ajax и изменить таблицу с помощью jquery, как здесь http://stackoverflow.com/questions/1075415/jquery-add-html-table-column –

ответ

0

Вы используете обертки MVC? Если вы используете веб-версию (JS), вы можете попытаться использовать функцию schema.parse для перехвата и синтаксического анализа этой длинной строки в массив JSON.

Смежные вопросы