Browse Source

fix search in datasave tools for max search

master
jkpete 4 weeks ago
parent
commit
519aee037b
  1. 61
      addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs
  2. 5
      addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs
  3. 50
      addons/EGFramework/Module/SaveTools/Data/EGCsvSave.cs
  4. 6
      addons/EGFramework/Module/SaveTools/Data/EGDapper.cs
  5. 6
      addons/EGFramework/Module/SaveTools/Data/EGLiteDBSave.cs
  6. 2
      addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs

61
addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace EGFramework.UI namespace EGFramework.UI
{ {
@ -10,6 +11,8 @@ namespace EGFramework.UI
public EasyEvent QueryPage { set; get; } = new EasyEvent(); public EasyEvent QueryPage { set; get; } = new EasyEvent();
public EasyEvent SearchKey { set; get; } = new EasyEvent();
public void InitSaveData<TSaveData>(IEGSaveData eGSaveData) where TSaveData : IEGSaveData public void InitSaveData<TSaveData>(IEGSaveData eGSaveData) where TSaveData : IEGSaveData
{ {
this.SaveData = eGSaveData; this.SaveData = eGSaveData;
@ -30,6 +33,7 @@ namespace EGFramework.UI
CurrentDataKey = key; CurrentDataKey = key;
EmptyData = typeof(T).EGenerateEmptyDictiontaryByType(); EmptyData = typeof(T).EGenerateEmptyDictiontaryByType();
QueryPage.Register(() => QueryPageData<T>()); QueryPage.Register(() => QueryPageData<T>());
SearchKey.Register(() => SearchDataByKeyword<T>());
TableName = typeof(T).Name; TableName = typeof(T).Name;
TitleData = typeof(T).EGenerateDictiontaryByType(); TitleData = typeof(T).EGenerateDictiontaryByType();
InitFunctionMenu(); InitFunctionMenu();
@ -49,6 +53,13 @@ namespace EGFramework.UI
TableData = SaveData.GetPage<T>(CurrentDataKey, PageAdapter.CurrentPage, PageAdapter.PageLimit).EGenerateDictionaryByGroup(); TableData = SaveData.GetPage<T>(CurrentDataKey, PageAdapter.CurrentPage, PageAdapter.PageLimit).EGenerateDictionaryByGroup();
} }
public void SearchDataByKeyword<T>() where T : new()
{
string fieldName = FieldSelect.Text;
string keyWords = SearchEdit.Text;
TableData = SaveData.FindData<T>(CurrentDataKey, fieldName, keyWords).EGenerateDictionaryByGroup();
}
public override void OnAddData(Dictionary<string, object> data) public override void OnAddData(Dictionary<string, object> data)
{ {
// base.OnAddData(data); // base.OnAddData(data);
@ -102,6 +113,7 @@ namespace EGFramework.UI
OnPageChanged.Invoke(); OnPageChanged.Invoke();
}); });
} }
ResetSearch();
//base.InitPageData(); //base.InitPageData();
} }
@ -110,26 +122,35 @@ namespace EGFramework.UI
RowDataContainer.ClearChildren(); RowDataContainer.ClearChildren();
string fieldName = FieldSelect.Text; string fieldName = FieldSelect.Text;
string keyWords = SearchEdit.Text; string keyWords = SearchEdit.Text;
// List<Dictionary<string, object>> SearchData = TableData.ESearchByKeyword(fieldName, keyWords); SearchKey.Invoke();
// int dataPointer = 0; int dataPointer = 0;
// foreach (Dictionary<string, object> searchrow in SearchData) foreach (Dictionary<string, object> data in TableData)
// { {
// EGodotTableRowData rowData = RowDataContainer.CreateNode<EGodotTableRowData>("row" + dataPointer); EGodotTableRowData rowData = RowDataContainer.CreateNode<EGodotTableRowData>("row" + dataPointer);
// dataPointer++; dataPointer++;
// rowData.Init(searchrow); rowData.Init(data);
// rowData.OnModify.Register(data => rowData.OnModify.Register(eData =>
// { {
// this.EGEditDialog(data, rowData.OnDataEdit, "Modify"); this.EGEditDialog(eData, ModifyData, "Modify");
// }); });
// rowData.OnDelete.Register(() => rowData.OnDelete.Register(() =>
// { {
// this.TableData.Remove(rowData.GetData()); string primaryKey = "";
// PageAdapter.DataLength--; if (rowData.GetData().ContainsKey("ID")) primaryKey = "ID";
// PageAdapter.Reload(PageAdapter.DataLength, PageLimit); if (rowData.GetData().ContainsKey("id")) primaryKey = "id";
// InitPageData(); if (rowData.GetData().ContainsKey("Id")) primaryKey = "Id";
// OnPageChanged.Invoke(); 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();
});
}
} }
} }
} }

5
addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs

@ -28,9 +28,7 @@ namespace EGFramework.UI
protected IUnRegister PageChangedRealease { set; get; } protected IUnRegister PageChangedRealease { set; get; }
protected List<Dictionary<string, object>> TableData { set; get; } protected List<Dictionary<string, object>> TableData { set; get; }
protected Dictionary<string, object> EmptyData { set; get; }
protected Dictionary<string,object> EmptyData { set; get; }
protected Dictionary<string, object> TitleData { set; get; } = new Dictionary<string, object>(); protected Dictionary<string, object> TitleData { set; get; } = new Dictionary<string, object>();
protected EasyEvent<Dictionary<string, object>> AddData { set; get; } = new EasyEvent<Dictionary<string, object>>(); protected EasyEvent<Dictionary<string, object>> AddData { set; get; } = new EasyEvent<Dictionary<string, object>>();
@ -218,6 +216,7 @@ namespace EGFramework.UI
OnPageChanged.Invoke(); OnPageChanged.Invoke();
}); });
} }
ResetSearch();
} }
public void InitPageMenu() public void InitPageMenu()

50
addons/EGFramework/Module/SaveTools/Data/EGCsvSave.cs

@ -253,16 +253,58 @@ namespace EGFramework
} }
return sourceList.Where(expression.Compile()); return sourceList.Where(expression.Compile());
} }
public IEnumerable<TData> FindData<TData>(string dataKey, string columnName, string keyWords) where TData : new()
{
// throw new NotImplementedException();
List<TData> DataList = new List<TData>();
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<CsvParamAttribute>();
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<TData>(string dataKey, TData data) public void AddData<TData>(string dataKey, TData data)
{ {
if(IsReadOnly){ if (IsReadOnly)
{
throw new Exception("This file is readonly! can't set any data to file."); throw new Exception("This file is readonly! can't set any data to file.");
} }
string[] csvSet = new string[CsvDataHeader.Keys.Count()]; 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<CsvParamAttribute>(); CsvParamAttribute csvParam = property.GetCustomAttribute<CsvParamAttribute>();
if(csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)){ if (csvParam != null && CsvDataHeader.ContainsKey(csvParam._name))
{
csvSet[CsvDataHeader[csvParam._name]] = property.GetValue(data).ToString(); csvSet[CsvDataHeader[csvParam._name]] = property.GetValue(data).ToString();
} }
} }
@ -445,8 +487,6 @@ namespace EGFramework
return CsvDataBlock.Count(); return CsvDataBlock.Count();
} }
} }
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]

6
addons/EGFramework/Module/SaveTools/Data/EGDapper.cs

@ -43,6 +43,12 @@ namespace EGFramework
return sourceList.Where(expression.Compile()); return sourceList.Where(expression.Compile());
} }
public IEnumerable<TData> FindData<TData>(string dataKey, string columnName, string keyWords) where TData : new()
{
IEnumerable<TData> sourceList = Connection.Query<TData>("select * from " + dataKey + " where " + columnName + " like " + "'%"+keyWords+"%'");
return sourceList;
}
public void SetData<TData>(string dataKey, TData data, object id) public void SetData<TData>(string dataKey, TData data, object id)
{ {
if (data == null) if (data == null)

6
addons/EGFramework/Module/SaveTools/Data/EGLiteDBSave.cs

@ -71,6 +71,12 @@ namespace EGFramework
return collection.Find(expression); return collection.Find(expression);
} }
public IEnumerable<TData> FindData<TData>(string dataKey, string columnName, string keyWords) where TData : new()
{
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);
return collection.Find(Query.EQ(columnName,new BsonValue(keyWords)));
}
public void AddData<TData>(string dataKey, TData data) public void AddData<TData>(string dataKey, TData data)
{ {
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey); LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);

2
addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs

@ -76,7 +76,7 @@ namespace EGFramework
IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new(); IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new();
IEnumerable<TData> GetPage<TData>(string dataKey,int pageIndex,int pageSize) where TData : new(); IEnumerable<TData> GetPage<TData>(string dataKey,int pageIndex,int pageSize) where TData : new();
IEnumerable<TData> FindData<TData>(string dataKey,Expression<Func<TData, bool>> expression) where TData : new(); IEnumerable<TData> FindData<TData>(string dataKey,Expression<Func<TData, bool>> expression) where TData : new();
// IEnumerable<Dictionary<string, object>> FindData(string dataKey, string columnName, string keyWords); IEnumerable<TData> FindData<TData>(string dataKey, string columnName, string keyWords) where TData : new();
IEnumerable<string> GetKeys(); IEnumerable<string> GetKeys();
bool ContainsKey(string dataKey); bool ContainsKey(string dataKey);
bool ContainsData(string dataKey,object id); bool ContainsData(string dataKey,object id);

Loading…
Cancel
Save