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 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
namespace EGFramework.UI
{
@ -10,6 +11,8 @@ 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<TSaveData>(IEGSaveData eGSaveData) where TSaveData : IEGSaveData
{
this.SaveData = eGSaveData;
@ -30,6 +33,7 @@ namespace EGFramework.UI @@ -30,6 +33,7 @@ namespace EGFramework.UI
CurrentDataKey = key;
EmptyData = typeof(T).EGenerateEmptyDictiontaryByType();
QueryPage.Register(() => QueryPageData<T>());
SearchKey.Register(() => SearchDataByKeyword<T>());
TableName = typeof(T).Name;
TitleData = typeof(T).EGenerateDictiontaryByType();
InitFunctionMenu();
@ -49,6 +53,13 @@ namespace EGFramework.UI @@ -49,6 +53,13 @@ namespace EGFramework.UI
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)
{
// base.OnAddData(data);
@ -102,6 +113,7 @@ namespace EGFramework.UI @@ -102,6 +113,7 @@ namespace EGFramework.UI
OnPageChanged.Invoke();
});
}
ResetSearch();
//base.InitPageData();
}
@ -110,26 +122,35 @@ namespace EGFramework.UI @@ -110,26 +122,35 @@ namespace EGFramework.UI
RowDataContainer.ClearChildren();
string fieldName = FieldSelect.Text;
string keyWords = SearchEdit.Text;
// List<Dictionary<string, object>> SearchData = TableData.ESearchByKeyword(fieldName, keyWords);
// int dataPointer = 0;
// foreach (Dictionary<string, object> searchrow in SearchData)
// {
// EGodotTableRowData rowData = RowDataContainer.CreateNode<EGodotTableRowData>("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<string, object> data in TableData)
{
EGodotTableRowData rowData = RowDataContainer.CreateNode<EGodotTableRowData>("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();
});
}
}
}
}

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

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

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

@ -253,16 +253,58 @@ namespace EGFramework @@ -253,16 +253,58 @@ namespace EGFramework
}
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)
{
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<CsvParamAttribute>();
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 @@ -445,8 +487,6 @@ namespace EGFramework
return CsvDataBlock.Count();
}
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]

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

@ -43,6 +43,12 @@ namespace EGFramework @@ -43,6 +43,12 @@ namespace EGFramework
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)
{
if (data == null)

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

@ -71,6 +71,12 @@ namespace EGFramework @@ -71,6 +71,12 @@ namespace EGFramework
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)
{
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);

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

@ -76,7 +76,7 @@ namespace EGFramework @@ -76,7 +76,7 @@ namespace EGFramework
IEnumerable<TData> GetAll<TData>(string dataKey) 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<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();
bool ContainsKey(string dataKey);
bool ContainsData(string dataKey,object id);

Loading…
Cancel
Save