private WbapList CreatePageList(DataListBindSchema listSchema) { WbapList webList = new WbapList(); webList.Id = listSchema.Id; webList.DataRow = listSchema.DataRow; for (int j = 0; j < listSchema.Columns.Count; j++) { FieldBindSchema fieldSchema = listSchema.Columns[j]; webList.Columns.Add(fieldSchema.Id); } DataTable table = this.DataSet.Tables[listSchema.TableId]; if (table == null) { throw new E_WbdlDataSourceNotFindTable(listSchema.TableId); } DataColumn[] keys = table.PrimaryKey; foreach (DataColumn key in keys) { string colName = key.ColumnName + WbdlConst._Key.ToString(); if (!webList.Columns.Contains(colName)) { webList.Columns.Add(colName); } } return(webList); }
internal WbapList GetWbapList(string elementId) { WbapList list = GetNullWbapList(elementId); PageDataList pageDataList = Page.PageLists[elementId]; FillWbapList(list, pageDataList.DataTable.Select()); return(list); }
internal void BuildRequestDataBodyWithTable(WbapDataBody wbapElementBinds, string tableName, DataRow[] dataRows) { PageDataForm form = Page.PageForms.FindForm(tableName); //if (form == null) InitFieldBinds(); //form = Page.PageForms.FindForm(fieldName); if (form != null) { BuildRequestDataBodyWithForm(wbapElementBinds, form, dataRows); } PageDataList list = Page.PageLists.FindListByTableName(tableName); if (list != null) { WbapList wbapList = CreatePageList(list.ListSchema); if (dataRows != null) { FillWbapList(wbapList, dataRows); } wbapElementBinds.Add(wbapList.Id + WbapList.TypeMarker, wbapList); } }
internal void SetWbapList(string elementId, WbapList wbapList) { string typeMarker = WbapDataType._List.ToString(); if (elementId.EndsWith(typeMarker)) { elementId = elementId.Substring(0, elementId.Length - typeMarker.Length); } if (!Page.PageLists.ContainsKey(elementId)) { DataListBindSchema listSchema = this.Schame.DataListBinds.FindItem(elementId); if (listSchema == null) { throw new E_WbdlListSchemaNotDefine(elementId); } InitDataList(listSchema); } if (!Page.PageLists.ContainsKey(elementId)) { throw new E_WbdlPageNotHaveListElement(elementId); } PageDataList pageList = Page.PageLists[elementId]; if (pageList == null) { throw new E_WbdlPageNotHaveListElement(elementId); } DataColumn[] keyCols = pageList.DataTable.PrimaryKey; Dictionary <string, int> keyIndexs = new Dictionary <string, int>(); for (int i = 0; i < keyCols.Length; i++) { string keyName = keyCols[i].ColumnName + WbdlConst._Key.ToString(); int keyIndex = wbapList.Columns.IndexOf(keyName); if (keyIndex < 0) { throw new E_WbdlWbapListNoKeyColumn(keyName); } keyIndexs.Add(keyCols[i].ColumnName, keyIndex); } for (int i = 0; i < wbapList.Data.Count; i++) { List <string> row = wbapList.Data[i]; string filter = ""; bool isNewRow = false; foreach (KeyValuePair <string, int> keyIndex in keyIndexs) { if (string.IsNullOrEmpty(row[keyIndex.Value])) { isNewRow = true; break; } filter += keyIndex.Key + "='" + row[keyIndex.Value] + "' and "; } DataRow dataRow = null; if (!isNewRow) { if (filter.EndsWith(" and ")) { filter = filter.Substring(0, filter.Length - " and ".Length); } if (string.IsNullOrEmpty(filter)) { throw new E_WbdlPageControllerException("key err can not select record "); } DataRow[] dataRows = pageList.DataTable.Select(filter); if (dataRows.Length > 0) { dataRow = dataRows[0]; } } if (dataRow == null) { isNewRow = true; } if (isNewRow) { isNewRow = true; dataRow = pageList.DataTable.NewRow(); } if (!isNewRow) { dataRow.BeginEdit(); } foreach (PageDataField col in pageList.Fields) { int wbapColIndex = wbapList.Columns.IndexOf(col.ElementId); if (wbapColIndex > -1) { dataRow[col.FieldId] = row[wbapColIndex]; } } if (!isNewRow) { dataRow.EndEdit(); } if (isNewRow) { pageList.DataTable.Rows.Add(dataRow); } } }
private void FillWbapList(WbapList list, DataRow[] dataRows) { DataListBindSchema listSchema = Schame.DataListBinds.FindItem(list.Id); if (listSchema == null) { return; } if (dataRows == null) { string tableName = GetListTableId(listSchema); if (String.IsNullOrEmpty(tableName)) { return; } if (this.DataSet == null) { return; } DataTable table = this.DataSet.Tables[listSchema.TableId]; if (table == null) { throw new E_WbdlDataSourceNotFindTable(listSchema.TableId); } dataRows = table.Select(); } list.Data.Clear(); if (dataRows.Length == 1 && (dataRows[0].RowState == DataRowState.Added || dataRows[0].RowState == DataRowState.Detached)) { list.IsAdd = true; } foreach (DataRow dataRow in dataRows) { List <string> listRow = new List <string>(); list.Data.Add(listRow); foreach (string colName in list.Columns) { string fieldName = null; if (colName.EndsWith(WbdlConst._Key.ToString())) { fieldName = colName.Substring(0, colName.Length - WbdlConst._Key.ToString().Length); } else { fieldName = listSchema.Columns.GetItem(colName).FieldId; } if (String.IsNullOrEmpty(fieldName)) { listRow.Add(""); } else { listRow.Add(dataRow[fieldName].ToString()); } } } }