using System.Collections;
using System.Globalization;
using System.Linq;
using System.Web.Mvc;
using C1.Web.Mvc;
using WebApiExplorer.Models;
using System.Collections.Generic;
using System;
namespace WebApiExplorer.Controllers
{
public partial class MVCFlexGridController : Controller
{
private readonly GridExportImportOptions _flexGridModel = new GridExportImportOptions
{
NeedExport = true,
NeedImport = true,
IncludeColumnHeaders = true
};
private readonly ControlOptions _gridDataModel = new ControlOptions
{
Options = new OptionDictionary
{
{"Items",new OptionItem{Values = new List<string> {"5", "50", "500", "5000"},CurrentValue = "500"}},
{"Allow Sorting", new OptionItem {Values = new List<string> {"None", "SingleColumn","MultiColumn"}, CurrentValue = "None"}},
{"Selection",new OptionItem{Values = new List<string> {"None", "Cell", "CellRange", "Row", "RowRange", "ListBox","MultiRange"},CurrentValue = "Cell"}},
{"Formatting", new OptionItem {Values = new List<string> {"On", "Off"}, CurrentValue = "Off"}},
{"Column Visibility",new OptionItem {Values = new List<string> {"Show", "Hide"}, CurrentValue = "Show"}},
{"Column Resize", new OptionItem {Values = new List<string> {"100", "250"}, CurrentValue = "100"}}
}
};
public ActionResult Index(FormCollection collection)
{
IValueProvider data = collection;
if (CallbackManager.CurrentIsCallback)
{
var request = CallbackManager.GetCurrentCallbackData<CollectionViewRequest<object>>();
if (request != null && request.ExtraRequestData != null)
{
var extraData = request.ExtraRequestData.Cast<DictionaryEntry>()
.ToDictionary(kvp => (string)kvp.Key, kvp => kvp.Value.ToString());
data = new DictionaryValueProvider<string>(extraData, CultureInfo.CurrentCulture);
}
}
_gridDataModel.LoadPostData(data);
var model = Sale.GetData(Convert.ToInt32(_gridDataModel.Options["items"].CurrentValue));
ViewBag.Options = _flexGridModel;
ViewBag.DemoOptions = _gridDataModel;
return View(model);
}
}
}
@using WebApiExplorer.Models
@using C1.Web.Mvc.Grid
@model IEnumerable<Sale>
@{
ControlOptions optionsModel = ViewBag.DemoOptions;
GridExportImportOptions exportOptionsModel = ViewBag.Options;
ViewBag.DemoSettings = true;
}
<script>
function collectingQueryData(sender, e) {
if (e.extraRequestData == null) {
e.extraRequestData = {};
}
@foreach (var menuName in optionsModel.Options.Keys.Select(ControlOptions.ToOptionName))
{
<text>
e.extraRequestData["@(menuName)"] = '@(optionsModel.Options[menuName].CurrentValue)';
</text>
}
}
</script>
@(Html.C1().FlexGrid<Sale>()
.Id(exportOptionsModel.ControlId)
.AutoGenerateColumns(false)
.SortingType((AllowSorting)Enum.Parse(typeof(AllowSorting), optionsModel.Options["Allow Sorting"].CurrentValue))
.SelectionMode((SelectionMode)Enum.Parse(typeof(SelectionMode), optionsModel.Options["Selection"].CurrentValue))
.Bind(bl => bl.DisableServerRead(true).Bind(Model).OnClientQueryData("collectingQueryData"))
.CssClass("grid")
.IsReadOnly(true)
.Columns(bl =>
{
bl.Add(cb => cb.Binding("ID").Visible(string.Compare(optionsModel.Options["Column Visibility"].CurrentValue, "Show", true) == 0));
bl.Add(cb => cb.Binding("Start").Format(optionsModel.Options["Formatting"].CurrentValue == "On" ? "MMM d yy" : ""));
bl.Add(cb => cb.Binding("End").Format(optionsModel.Options["Formatting"].CurrentValue == "On" ? "HH:mm" : ""));
bl.Add(cb => cb.Binding("Country").Width(optionsModel.Options["Column Resize"].CurrentValue));
bl.Add(cb => cb.Binding("Product"));
bl.Add(cb => cb.Binding("Color"));
bl.Add(cb => cb.Binding("Amount").Format("c"));
bl.Add(cb => cb.Binding("Amount2").Format("c"));
bl.Add(cb => cb.Binding("Discount").Format("p0"));
bl.Add(cb => cb.Binding("Active"));
})
)
@section Settings{
@Html.Partial("_OptionsMenu", optionsModel)
@Html.Partial("_FlexGridOptions", exportOptionsModel)
}
@section Description{
@Html.Raw(Resources.MVCFlexGrid.Index_Text0)
}