public void SetColumnsByReflection() { var props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var prop in props) { var pi = prop; ColumnDefs.Add(pi.Name, t => pi.GetValue(t, null)); } }
// 初始化 void Initial() { string strError = ""; ColumnDefs defs = null; int nRet = PrepareColumnDefs(out defs, out strError); if (nRet == -1) { this.ShowMessage(strError, "red", true); this.tabControl_main.Enabled = false; this._defs = null; return; } this._defs = defs; }
void AppendColumns(ColumnDefs defs, ListViewItem target, ListViewItem source) { int target_index = defs._base_colmun_defs.Count + 2; foreach (int source_index in defs.source_indices) { string strText = ListViewUtil.GetItemText(source, source_index + 2); ListViewUtil.ChangeItemText(target, target_index ++, strText); } }
// return: // -1 出错 // 其他 超出范围的事项的个数 int AddOutOfRangeItemsToBaseList( ColumnDefs defs, List<ListViewItem> outofrange_source_items, // List<string> recpaths, out string strError) { strError = ""; int nRet = 0; int nCount = 0; List<ListViewItem> items = new List<ListViewItem>(); foreach (ListViewItem source_item in outofrange_source_items) { string strItemRecPath = ListViewUtil.GetItemText(source_item, defs.InventoryItemRecPathColumnIndex + 2); ListViewItem item = new ListViewItem(); item.Text = strItemRecPath; this.listView_baseList_records.Items.Add(item); items.Add(item); // 事项超出基准集的范围了,设为黄色背景 item.Tag = LineType.OutOfRange; SetLineColor(item, LineType.OutOfRange); AppendColumns(defs, item, source_item); // 复制书目摘要列 ListViewUtil.ChangeItemText(item, 1, ListViewUtil.GetItemText(source_item, 1)); nCount++; } string strBrowseStyle = "id,cols,format:@coldef:" + this._defs.BrowseColumnDef; // 刷新浏览行 nRet = RefreshListViewLines(items, strBrowseStyle, false, false, // 不清除右侧多出来的列内容 out strError); if (nRet == -1) return -1; #if NO // 刷新书目摘要 bool bAccessBiblioSummaryDenied = false; if (bAccessBiblioSummaryDenied == false) { this.DbType = "item"; try { // return: // -2 获得书目摘要的权限不够 // -1 出错 // 0 用户中断 // 1 完成 nRet = _fillBiblioSummaryColumn(items, 0, false, true, // false, // bAutoSearch out strError); } finally { this.DbType = "inventory"; } if (nRet == -1) return -1; if (nRet == -2) bAccessBiblioSummaryDenied = true; if (nRet == 0) this.ShowMessage("用户中断刷新书目摘要...", "yellow", true); } #endif return nCount; }
int PrepareColumnDefs(out ColumnDefs defs, out string strError) { defs = null; strError = ""; defs = new ColumnDefs(); defs.InventoryDbName = this.MainForm.GetUtilDbName("inventory"); if (string.IsNullOrEmpty(defs.InventoryDbName) == true) { strError = "尚未定义盘点库"; return -1; } { // 获得 册记录路径 的列号 ColumnPropertyCollection temp = this.MainForm.GetBrowseColumnProperties(defs.InventoryDbName); defs.InventoryItemRecPathColumnIndex = temp.FindColumnByType("item_recpath"); if (defs.InventoryItemRecPathColumnIndex == -1) { strError = "盘点库 '" + defs.InventoryDbName + "' 的 browse 配置文件中未定义 type 为 item_recpath 的列"; return -1; } } { defs._base_colmun_defs = this.MainForm.GetBrowseColumnProperties("[inventory_item]"); if (defs._base_colmun_defs == null) { strError = "[inventory_item] 库列定义没有找到"; return -1; } } { // 获得 册记录路径 的列号 defs._inventory_column_defs = this.MainForm.GetBrowseColumnProperties(defs.InventoryDbName); if (defs._inventory_column_defs == null) { strError = defs.InventoryDbName + " 库列定义没有找到"; return -1; } List<string> types = new List<string>(); types.Add("batch_no"); types.Add("operator"); types.Add("oper_time"); foreach (string type in types) { int nCol = defs._inventory_column_defs.FindColumnByType(type); if (nCol == -1) { strError = defs.InventoryDbName + " 库中 type 为 " + type + " 的列定义没有找到"; return -1; } defs.source_indices.Add(nCol); defs.source_types.Add(type); } } { string strColumnDef = ""; // return: // -1 出错 // 0 没有找到定义 // 1 找到 int nRet = GetColumnDefString(out strColumnDef, out strError); if (nRet == -1) return -1; defs.BrowseColumnDef = strColumnDef; } return 0; }