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