winforms在本地保存数据表

时间:2009-08-11 07:11:32

标签: c# datatable

在我的应用程序中,我从数据库加载一个小数据表,并使用数据表将列绑定到组合框下拉列表。

每次显示组合框时,我都相信它会从数据库中提取数据,这似乎是不必要的,因为数据几乎不会发生任何变化。

当应用程序打开时,有没有办法在内存中加载一次数据表,然后在表单中反复使用它?

请解释这将如何运作的基本机制。

4 个答案:

答案 0 :(得分:1)

您可以使用共享变量/对象来保存winforms中的数据。

答案 1 :(得分:0)

将您的数据表作为主要表单的属性,如下所示:

private DataTable _dataSource;
private DataTable DataSource
{
  get
  {
    if (_dataSource == null)
    {
      // Fill your _dataSource
    }

    return _dataSource;
  }
}

并使用此属性绑定您的下拉列表。 _dataSource将是一个与主表单实例相对应的全局变量。

答案 2 :(得分:0)

我在这种情况下使用静态类:

public static class OraProvider
    {
        private static Dictionary<string, DataTable> _cachedDateTable; 
        ...
        public static DataTable GetTable(string Table, bool cache)
        {
            if (cache && _cachedDateTable.ContainsKey(Table))
            {
                return _cachedDateTable[Table];
            }
            if (Connection.State == ConnectionState.Open)
            {
                DataTable dt = new DataTable(Table);

                commonCommand.CommandText = "SELECT * FROM " + Table;
                commonCommand.Connection = Connection;
                commonDataAdapter.Fill(dt);
                if (cache)
                {
                    _cachedDateTable.Add(Table, dt);
                }
                else
                {
                    if (_cachedDateTable.ContainsKey(Table))
                    {
                        _cachedDateTable.Remove(Table);
                        _cachedDateTable.Add(Table, dt);
                    }
                }
                return dt;
            }
            else
            {
                return null;
            }
        }
...
}

答案 3 :(得分:0)

有两种(如果不是更多)可能的方式:

一种方法是在项目中添加一个类型化数据集,并手动创建一个包含相应列的表。然后,创建代码以填充该表,并使用BindingSource将其作为数据源添加到列中。

您还可以使用对象数据源

声明一个包含公共成员的类(例如MyDataClass)(必须是读/写属性IIRC。如果这不起作用,请创建公共成员变量)以获取ID和值。在表单中声明一个通用列表,如

private List<MyDataClass> m_dataSource = new List<MyDataClass>();

此列表将用作列的数据源。对于要在组合框中显示的每个值,使用MyDataClass的一个实例填充列表。

然后,在项目中为MyDataClass类创建一个新的对象数据源。我正在使用德语VS2008,所以我不知道菜单项的确切名称。它应该是“Data&gt; Show DataSources”并且在数据源工具窗口中:添加新的数据源。在以下对话框中,选择“对象”并选择类MyDataClass

然后,您将获得一个新数据源,其中包含上面声明的属性的成员。将BindingSource添加到表单和对象数据源的一个实例。将其分配给BindingSource(这样您就可以使用设计器来选择字段等)。将BindingSource指定为列的DataSource,并相应地选择ValueMemberDataMember属性。

然后,在代码中,将数据加载到通用列表后,将m_dataSource分配给BindingSource的DataSource属性:

bindingSource.DataSource = m_dataSource;

请记住,我是从记忆中写下来的 - 可能涉及更多步骤,但它应该与我所描述的相似。