From 519aee037b4f2461561299a8af8664f8245e78e1 Mon Sep 17 00:00:00 2001 From: jkpete <1031139173@qq.com> Date: Mon, 14 Jul 2025 16:23:20 +0800 Subject: [PATCH] fix search in datasave tools for max search --- .../Templete/Godot/UI/EGodotSaveTable.cs | 61 +++++++++++++------ .../Templete/Godot/UI/EGodotTable.cs | 5 +- .../Module/SaveTools/Data/EGCsvSave.cs | 50 +++++++++++++-- .../Module/SaveTools/Data/EGDapper.cs | 6 ++ .../Module/SaveTools/Data/EGLiteDBSave.cs | 6 ++ .../Module/SaveTools/SaveToolsInterface.cs | 2 +- 6 files changed, 101 insertions(+), 29 deletions(-) diff --git a/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs b/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs index 4c5feaa..77e1bfe 100644 --- a/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs +++ b/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; namespace EGFramework.UI { @@ -10,6 +11,8 @@ namespace EGFramework.UI public EasyEvent QueryPage { set; get; } = new EasyEvent(); + public EasyEvent SearchKey { set; get; } = new EasyEvent(); + public void InitSaveData(IEGSaveData eGSaveData) where TSaveData : IEGSaveData { this.SaveData = eGSaveData; @@ -30,6 +33,7 @@ namespace EGFramework.UI CurrentDataKey = key; EmptyData = typeof(T).EGenerateEmptyDictiontaryByType(); QueryPage.Register(() => QueryPageData()); + SearchKey.Register(() => SearchDataByKeyword()); TableName = typeof(T).Name; TitleData = typeof(T).EGenerateDictiontaryByType(); InitFunctionMenu(); @@ -49,6 +53,13 @@ namespace EGFramework.UI TableData = SaveData.GetPage(CurrentDataKey, PageAdapter.CurrentPage, PageAdapter.PageLimit).EGenerateDictionaryByGroup(); } + public void SearchDataByKeyword() where T : new() + { + string fieldName = FieldSelect.Text; + string keyWords = SearchEdit.Text; + TableData = SaveData.FindData(CurrentDataKey, fieldName, keyWords).EGenerateDictionaryByGroup(); + } + public override void OnAddData(Dictionary data) { // base.OnAddData(data); @@ -102,6 +113,7 @@ namespace EGFramework.UI OnPageChanged.Invoke(); }); } + ResetSearch(); //base.InitPageData(); } @@ -110,26 +122,35 @@ namespace EGFramework.UI RowDataContainer.ClearChildren(); string fieldName = FieldSelect.Text; string keyWords = SearchEdit.Text; - // List> SearchData = TableData.ESearchByKeyword(fieldName, keyWords); - // int dataPointer = 0; - // foreach (Dictionary searchrow in SearchData) - // { - // EGodotTableRowData rowData = RowDataContainer.CreateNode("row" + dataPointer); - // dataPointer++; - // rowData.Init(searchrow); - // rowData.OnModify.Register(data => - // { - // this.EGEditDialog(data, rowData.OnDataEdit, "Modify"); - // }); - // rowData.OnDelete.Register(() => - // { - // this.TableData.Remove(rowData.GetData()); - // PageAdapter.DataLength--; - // PageAdapter.Reload(PageAdapter.DataLength, PageLimit); - // InitPageData(); - // OnPageChanged.Invoke(); - // }); - // } + SearchKey.Invoke(); + int dataPointer = 0; + foreach (Dictionary data in TableData) + { + EGodotTableRowData rowData = RowDataContainer.CreateNode("row" + dataPointer); + dataPointer++; + rowData.Init(data); + rowData.OnModify.Register(eData => + { + this.EGEditDialog(eData, ModifyData, "Modify"); + }); + rowData.OnDelete.Register(() => + { + string primaryKey = ""; + if (rowData.GetData().ContainsKey("ID")) primaryKey = "ID"; + if (rowData.GetData().ContainsKey("id")) primaryKey = "id"; + if (rowData.GetData().ContainsKey("Id")) primaryKey = "Id"; + if (primaryKey == "") + { + this.EGAlert("Parmary key 'id' not defined!", "Error"); + return; + } + int remove_count = SaveData.RemoveData(CurrentDataKey, rowData.GetData()[primaryKey]); + PageAdapter.DataLength -= remove_count; + PageAdapter.Reload(PageAdapter.DataLength, PageLimit); + InitPageData(); + OnPageChanged.Invoke(); + }); + } } } } \ No newline at end of file diff --git a/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs b/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs index 488af25..95ebbc9 100644 --- a/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs +++ b/addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs @@ -28,9 +28,7 @@ namespace EGFramework.UI protected IUnRegister PageChangedRealease { set; get; } protected List> TableData { set; get; } - - protected Dictionary EmptyData { set; get; } - + protected Dictionary EmptyData { set; get; } protected Dictionary TitleData { set; get; } = new Dictionary(); protected EasyEvent> AddData { set; get; } = new EasyEvent>(); @@ -218,6 +216,7 @@ namespace EGFramework.UI OnPageChanged.Invoke(); }); } + ResetSearch(); } public void InitPageMenu() diff --git a/addons/EGFramework/Module/SaveTools/Data/EGCsvSave.cs b/addons/EGFramework/Module/SaveTools/Data/EGCsvSave.cs index fa32490..4bdb23f 100644 --- a/addons/EGFramework/Module/SaveTools/Data/EGCsvSave.cs +++ b/addons/EGFramework/Module/SaveTools/Data/EGCsvSave.cs @@ -253,16 +253,58 @@ namespace EGFramework } return sourceList.Where(expression.Compile()); } + + public IEnumerable FindData(string dataKey, string columnName, string keyWords) where TData : new() + { + // throw new NotImplementedException(); + List DataList = new List(); + PropertyInfo[] properties = typeof(TData).GetProperties(); + if (!CsvDataHeader.ContainsKey(columnName)) + { + EG.Print("Column not found!"); + return null; + } + for (int dataID = 0; dataID < CsvDataBlock.Count(); dataID++) + { + TData data = new TData(); + string compareStr = CsvDataBlock[dataID][CsvDataHeader[columnName]]; + if (!compareStr.Contains(keyWords)) + { + continue; + } + foreach (PropertyInfo property in properties) + { + CsvParamAttribute csvParam = property.GetCustomAttribute(); + if (csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)) + { + string valueStr = CsvDataBlock[dataID][CsvDataHeader[csvParam._name]]; + if (property.PropertyType == typeof(string)) + { + property.SetValue(data, valueStr); + } + else + { + property.SetValue(data, Convert.ChangeType(valueStr, property.PropertyType)); + } + } + } + DataList.Add(data); + } + return DataList; + } public void AddData(string dataKey, TData data) { - if(IsReadOnly){ + if (IsReadOnly) + { throw new Exception("This file is readonly! can't set any data to file."); } string[] csvSet = new string[CsvDataHeader.Keys.Count()]; - foreach(PropertyInfo property in data.GetType().GetProperties()){ + foreach (PropertyInfo property in data.GetType().GetProperties()) + { CsvParamAttribute csvParam = property.GetCustomAttribute(); - if(csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)){ + if (csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)) + { csvSet[CsvDataHeader[csvParam._name]] = property.GetValue(data).ToString(); } } @@ -445,8 +487,6 @@ namespace EGFramework return CsvDataBlock.Count(); } - - } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] diff --git a/addons/EGFramework/Module/SaveTools/Data/EGDapper.cs b/addons/EGFramework/Module/SaveTools/Data/EGDapper.cs index 3dad163..e53e4b5 100644 --- a/addons/EGFramework/Module/SaveTools/Data/EGDapper.cs +++ b/addons/EGFramework/Module/SaveTools/Data/EGDapper.cs @@ -43,6 +43,12 @@ namespace EGFramework return sourceList.Where(expression.Compile()); } + public IEnumerable FindData(string dataKey, string columnName, string keyWords) where TData : new() + { + IEnumerable sourceList = Connection.Query("select * from " + dataKey + " where " + columnName + " like " + "'%"+keyWords+"%'"); + return sourceList; + } + public void SetData(string dataKey, TData data, object id) { if (data == null) diff --git a/addons/EGFramework/Module/SaveTools/Data/EGLiteDBSave.cs b/addons/EGFramework/Module/SaveTools/Data/EGLiteDBSave.cs index b7e1ed3..292b630 100644 --- a/addons/EGFramework/Module/SaveTools/Data/EGLiteDBSave.cs +++ b/addons/EGFramework/Module/SaveTools/Data/EGLiteDBSave.cs @@ -71,6 +71,12 @@ namespace EGFramework return collection.Find(expression); } + public IEnumerable FindData(string dataKey, string columnName, string keyWords) where TData : new() + { + LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); + return collection.Find(Query.EQ(columnName,new BsonValue(keyWords))); + } + public void AddData(string dataKey, TData data) { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); diff --git a/addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs b/addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs index caba1ea..4ed14c2 100644 --- a/addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs +++ b/addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs @@ -76,7 +76,7 @@ namespace EGFramework IEnumerable GetAll(string dataKey) where TData : new(); IEnumerable GetPage(string dataKey,int pageIndex,int pageSize) where TData : new(); IEnumerable FindData(string dataKey,Expression> expression) where TData : new(); - // IEnumerable> FindData(string dataKey, string columnName, string keyWords); + IEnumerable FindData(string dataKey, string columnName, string keyWords) where TData : new(); IEnumerable GetKeys(); bool ContainsKey(string dataKey); bool ContainsData(string dataKey,object id);