Beispiel #1
0
        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);
        }
Beispiel #2
0
 public PageDataList(DataListBindSchema listSchema)
 {
     this.listSchema = listSchema;
     if (listSchema.Columns.Count > 0)
     {
         tableId = listSchema.Columns[0].TableId;
     }
 }
Beispiel #3
0
 public string GetListTableId(DataListBindSchema listSchema)
 {
     foreach (FieldBindSchema field in listSchema.Columns)
     {
         if (!String.IsNullOrEmpty(field.TableId))
         {
             return(field.TableId);
         }
     }
     return(null);
 }
Beispiel #4
0
 private void InitDataLists()
 {
     Page.PageLists.Clear();
     for (int i = 0; i < Schame.DataListBinds.Count; i++)
     {
         DataListBindSchema listSchema = Schame.DataListBinds[i];
         InitDataList(listSchema);
         //CreatePageList(listSchema);
         //FillWbapList(pageList);
     }
 }
Beispiel #5
0
        private PageDataList InitDataList(DataListBindSchema listSchema)
        {
            PageDataList pageList = new PageDataList(listSchema);

            Page.PageLists.Add(listSchema.Id, pageList);
            string tableName = "";

            foreach (FieldBindSchema fieldSchema in listSchema.Columns)
            {
                if (string.IsNullOrEmpty(tableName))
                {
                    tableName = fieldSchema.TableId;
                    DataTable dataTable = DataSet.Tables[tableName];
                    pageList.DataTable = dataTable;
                }
                PageDataField listField = new PageDataField(fieldSchema);
                listField.DataColumn = pageList.DataTable.Columns[fieldSchema.FieldId];
                pageList.Fields.Add(listField);
            }
            return(pageList);
        }
Beispiel #6
0
        internal WbapList GetNullWbapList(string elementId)
        {
            DataListBindSchema listSchema = Schame.DataListBinds.GetItem(elementId);

            return(CreatePageList(listSchema));
        }
Beispiel #7
0
        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);
                }
            }
        }
Beispiel #8
0
        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());
                    }
                }
            }
        }