如何避免每次初始化控件时重新绑定网格

本文关键字:新绑定 绑定 网格 何避免 初始化 控件 | 更新日期: 2023-09-27 18:16:24

我已经创建了一个带有网格的自定义用户控件。我想绑定这个网格一次,并在我的应用程序中一遍又一遍地使用它。如果我把绑定在控件中,数据被检索多少次我使用的控件。我如何只绑定一次??

public ClientLookUp()
    {
        InitializeComponent();
        vw_clientsTableAdapter.Fill(dsclientlkup.vw_clients); //This occurs as many times as I have the user control, instead of just once.
    }

如何避免每次初始化控件时重新绑定网格

每次构造对象时,您放入构造函数中的任何内容都将执行!如何提供一个Initialize方法,以便在需要重新加载数据时调用?

如果您只想加载一次数据,那么将其加载到静态变量或控件引用的单独类中

如果您真的想要在控件中反复使用相同的单个网格,您可以创建一个单一的静态网格,并让您的ClientLookUp构造函数将其添加到正确的位置- panel,或者无论何时创建新网格。

然而,在你走这条路之前,问问你自己这是否是你真正想做的。在许多地方使用相同的网格可能会给您带来问题。如果您想支持网格内编辑,您会发现更改一个值会更改所有其他网格中的相同值。

编辑

我试着让下面的代码工作,但我不确定这种方法是否可行。似乎当你试图将同一个UI元素附加到多个地方时,它就会从你最后放置的地方移开;看起来你不可能让同一个网格同时出现在多个地方。仔细想想,这是有道理的。

这是我试过的代码。也许它会对你有些用处。
    public UserControl1()
    {
        InitializeComponent();
        this.Controls.Add(myStaticGridView);
        myStaticGridView.Dock = DockStyle.Fill;
    }
    static DataGridView _staticGrid;
    public DataGridView myStaticGridView
    {
        get
        {
            if (_staticGrid != null)
                return _staticGrid;
            _staticGrid = new DataGridView();
            _staticGrid.Columns.Add("A", "A");
            _staticGrid.Columns.Add("B", "B");
            _staticGrid.Columns.Add("C", "C");
            _staticGrid.Columns[0].DataPropertyName = "A";
            _staticGrid.Columns[1].DataPropertyName = "B";
            _staticGrid.Columns[2].DataPropertyName = "C";
            _staticGrid.DataSource = new[] {
                new { A = "someA", B = "someB", C = "someC"},
                new { A = "someA", B = "someB", C = "someC"},
                new { A = "someA", B = "someB", C = "someC"},
                new { A = "someA", B = "someB", C = "someC"},
            };
            return _staticGrid;
        }
    }

然后像这样加载控件:

    private void button1_Click(object sender, EventArgs e)
    {
        flowLayoutPanel1.Controls.Add(new UserControl1());
    }