private string GetGridStore() { OptionBuilder storeBuilder = new OptionBuilder(); // store - fields JsArrayBuilder fieldsBuidler = new JsArrayBuilder(); foreach (GridColumn column in AllColumns) { JsObjectBuilder fieldBuilder = new JsObjectBuilder(); fieldBuilder.AddProperty("name", column.ColumnID); if (AllowCellEditing) { RenderBaseField field = column as RenderBaseField; if (field != null) { if (field is RenderField) { RenderField renderFiled = field as RenderField; if (renderFiled.FieldType != FieldType.Auto) { fieldBuilder.AddProperty("type", FieldTypeName.GetName(renderFiled.FieldType)); // 日期类型的,必须要设置这个 dateFormat 属性 if (renderFiled.FieldType == FieldType.Date) { fieldBuilder.AddProperty("dateFormat", DateUtil.ConvertToClientDateFormat(renderFiled.RendererArgument)); } } } else if (field is RenderCheckField) { fieldBuilder.AddProperty("type", "boolean"); } } } fieldsBuidler.AddProperty(fieldBuilder); } // 增加 idProperty //JsObjectBuilder idFieldBuilder = new JsObjectBuilder(); //idFieldBuilder.AddProperty("name", "__id"); fieldsBuidler.AddProperty("__id"); string fieldsScript = String.Format("var {0}={1};", Render_GridFieldsID, fieldsBuidler); // 自定义Model JsObjectBuilder modelOB = new JsObjectBuilder(); modelOB.AddProperty("extend", "Ext.data.Model"); modelOB.AddProperty("idProperty", "__id"); modelOB.AddProperty("fields", Render_GridFieldsID, true); storeBuilder.AddProperty("model", String.Format("Ext.define(null,{0})", modelOB), true); //storeBuilder.AddProperty("fields", Render_GridFieldsID, true); storeBuilder.AddProperty("remoteSort", true); // add by wz if (EnableGroup) storeBuilder.AddProperty("groupField", GroupField); // 设置初始排序列 if (AllowSorting) { string sortColumnID = GetSortColummID(); if (!String.IsNullOrEmpty(sortColumnID)) { JsObjectBuilder sorterBuilder = new JsObjectBuilder(); sorterBuilder.AddProperty("property", GetSortColummID()); sorterBuilder.AddProperty("direction", SortDirection.ToString()); storeBuilder.AddProperty("sorters", sorterBuilder); } } string postbackScript = GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "'Sort$'+sorter.property+'$'+sorter.direction"); postbackScript = "var sorter=operation.sorters[0];if(sorter){" + postbackScript + "}return false;"; storeBuilder.Listeners.AddProperty("beforeload", JsHelper.GetFunction(postbackScript, "store", "operation"), true); return fieldsScript + String.Format("var {0}=Ext.create('Ext.data.ArrayStore',{1});", Render_GridStoreID, storeBuilder.ToString()); #region old code //storeBuilder.AddProperty("remoteSort", true); //storeBuilder.AddProperty("proxy", String.Format("new Ext.ux.AspNetProxy('{0}')", ClientID), true); //storeBuilder.AddProperty("autoLoad", "{params:{start:0,limit:" + PageSize + "}}", true); //storeBuilder.AddProperty("data", GetDatas()); //if (AllowSorting) //{ // // Default sort info // if (SortColumnIndex >= 0 && SortColumnIndex < Columns.Count) // { // JsObjectBuilder sortInfoBuilder = new JsObjectBuilder(); // sortInfoBuilder.AddProperty("field", Columns[SortColumnIndex].ColumnID); // sortInfoBuilder.AddProperty("direction", SortDirection); // storeBuilder.AddProperty("sortInfo", sortInfoBuilder); // } //} //return String.Format("var {0}=new Ext.data.ArrayStore({1});", Render_GridStoreID, storeBuilder.ToString()); //#region store - data ////string dataArrayString = GetDataArrayString(startEndRowIndex[0], startEndRowIndex[1]); //int[] startEndRowIndex = GetStartEndRowIndex(); //// 计算完要渲染到前台的数据的条数,就要检查当前选中的项是不是有越界的 //ResolveSelectedRowIndexArray(startEndRowIndex[1] - startEndRowIndex[0]); //#endregion #endregion #region old code //JsArrayBuilder rowIndexBuilder = new JsArrayBuilder(); //if (SelectedRowIndexArray != null && SelectedRowIndexArray.Length > 0) //{ // foreach (int rowIndex in SelectedRowIndexArray) // { // rowIndexBuilder.AddProperty(rowIndex); // } //} //string selectRowScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, rowIndexBuilder); //// 选中哪些行,这个必须要defer(100),否则选不中,晕(10ms就不行) //selectRowScript = String.Format("(function(){{{0}}}).defer(100);", selectRowScript); //storeBuilder.AddProperty("listeners", String.Format("{{load:{0}}}", String.Format("function(){{{0}}}", selectRowScript)), true); #endregion #region old code // TODO //string selectedRowIndexArrayString = StringUtil.GetStringFromIntArray(SelectedRowIndexArray); //// FineUIAjax回发并且Columns发生变化,需要重新 //if (_FineUIAjaxColumnsChanged) //{ // string reconfigScript = String.Empty; // reconfigScript += gridStoreScript; // reconfigScript += String.Format("{0}.reconfigure({1},{2});", XID, Render_GridStoreID, Render_GridColumnModelID); // reconfigScript += String.Format("{0}.load();", Render_GridStoreID); // // 重新加载数据后要更新input选中哪些项(因为可能选中项也会变化) // reconfigScript += GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); // AddAjaxPropertyChangedScript(reconfigScript); //} //else //{ // bool reloadData = false; // string updateSelectRowScript = selectRowScript + GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); // if (AjaxPropertyChanged("DataArrayString", dataArrayString)) // { // string reloadDataScript = String.Format("{0}.loadData({1});", Render_GridStoreID, dataArrayString); // // 虽然有可能“不需要修改隐藏字段的值,因为SelectedRowIndexArray其实并没有变化,只是重新加载数据(reloadData)导致选中项丢失了” // // 但是我们还是修改了input的值,这没有什么影响 // reloadDataScript += updateSelectRowScript; // AddAjaxPropertyChangedScript(reloadDataScript); // reloadData = true; // } // // 不管SelectedRowIndexArray==null或者是不为空,都要做这一步 // // 在Ajax回发中,selectedRowIndexArrayString改变了,并且没有重新加载数据 // if (AjaxPropertyChanged("SelectedRowIndexArrayString", selectedRowIndexArrayString) && !reloadData) // { // AddAjaxPropertyChangedScript(updateSelectRowScript); // } //} #endregion #region old code //gridStoreScript += "\r\n"; //if (EnableClientPaging) //{ // // 进行分页时,改变隐藏input的值,以在回发时保持状态 // // 同时注意:客户端分页时,清空选中的值 // JsObjectBuilder listenersBuilder = new JsObjectBuilder(); // listenersBuilder.AddProperty(OptionName.Load, String.Format("function(store,records,options){{Ext.get('{0}').dom.value=options.params.start;Ext.get('{1}').dom.value='';}}", EnableClientPagingStartRowIndexID, SelectedRowsHiddenFieldID), true); // storeBuilder.AddProperty("listeners", listenersBuilder); //} // 每次都是加载全部 //loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + (endRowIndex - startRowIndex + 1) + "}}"); //// load store ////string loadStoreScript = String.Empty; //if (EnableClientPaging) //{ // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:" + EnableClientPagingStartRowIndex + ",limit:" + PageSize + "}}"); //} //else //{ // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + Rows.Count + "}}"); //} //gridStoreScript += loadStoreScript; #endregion }