【ArcGIS Pro二次开发】(58):数据的本地化存储

  • Post author:
  • Post category:其他


在做村规工具的过程中,需要设置一些参数,比如说导图的DPI,需要导出的图名等等。

每次导图前都需要设置参数,虽然有默认值,但还是需要不时的修改。

在使用的过程中,可能会有一些常用的参数,希望能够保存下来,而不是每次都去修改默认值。

于是,想到可以将这些参数保存到本地文件,然后下次打开的时候就可以自动读取本地文件上的数据。这样就会方便一些。



一、实现方法

至于要怎么实现,首先想到的是要保存的时候,将已经设置的参数写到一个txt文件里,然后需要的时候读取,应该是比较容易实现的。

做到一半,发现要保存各种格式的数据还挺麻烦的。

于是去网上搜索了一圈,发现了一个好东西:


C# 对象存储_c#对象存储_猿长大人的博客-CSDN博客

这位博主很专业,用的是【ApeFree.DataStore】,是一个开源工具,上面的文章介绍的很详细,想深入了解的可以去看看。

当然,我业余的,用不到这么多内容,只需要简单的保存和读取即可。

以村规参数设置为例:

这是初始数据参数。修改一下DPI和图纸列表,并点击确定关闭窗口:

然后,再重新打开设置窗口:

可以看到,上次保存的参数都在,没有被重置。因为这些数据都被保存在本地,保存文件是一个txt文件:



二、实现流程

首先,需要安装【ApeFree.DataStore】。

安装好后,先创建一个【Settings】,可以设置初始值。

public class Settings
{
    /// 参数设置
    // 导出图纸的DPI
    public int dpi { get; set; } = 300;
    // 导出图纸列表
    public List<string> listPic { get; set; } = new List<string>() { };
}

在初始化阶段创建一个store:

public partial class VgSetting : ArcGIS.Desktop.Framework.Controls.ProWindow
{
    // 设置一个store
    private LocalStore<Settings> store;
    .........
}
public VgSetting()
{
    InitializeComponent();

    combox_pic.Items.Add("现状用地图");
    combox_pic.Items.Add("规划用地图");
    combox_pic.Items.Add("管制边界图");

    // 创建数据存储文件
    string savePath = @"C:\ProSDKSettings\Settings.txt";
    store = StoreFactory.Factory.CreateLocalStore<Settings>(new ApeFree.DataStore.Local.LocalStoreAccessSettings(savePath));
}

在窗体加载的时候,读取store里的数据:

private void Form_Load(object sender, EventArgs e)
{
    try
    {
        // 加载store
        store.Load();
        // 参数获取
        textDPI.Text = store.Value.dpi.ToString();

        listBox.Items.Clear();
        foreach (var item in store.Value.listPic)
        {
            listBox.Items.Add(item.ToString());
        }
    }
    catch (Exception ee)
    {
        MessageBox.Show(ee.Message + ee.StackTrace);
        return;
    }
}

在窗体关闭的时候,把store里的数据存入本地txt文件即可:

// 窗体关闭
private void Form_Closed(object sender, EventArgs e)
{
    try
    {
        // 保存参数
        store.Value.dpi = int.Parse(textDPI.Text);
        store.Value.listPic = listBox.Items.Cast<string>().ToList();
        // 保存store
        store.Save();
    }
    catch (Exception ee)
    {
        MessageBox.Show(ee.Message + ee.StackTrace);
        return;
    }
}

以上即可实现工具的功能,【ApeFree.DataStore】还有不少东西,后面再慢慢学习吧。



三、工具文件分享

我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:




【ArcGIS Pro二次开发】:CC工具箱



https://blog.csdn.net/xcc34452366/article/details/131506345



PS:可以直接点击…bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。



版权声明:本文为xcc34452366原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。