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

时间:2011-12-02 16:29:50

标签: c# winforms gridview

我用网格创建了一个自定义用户控件。我想绑定一次这个网格,并在我的应用程序中反复使用它。如果我将绑定放在控件中,则在使用控件时检索数据的次数。我怎么只绑定一次??

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

    }

3 个答案:

答案 0 :(得分:0)

每次构造对象时,都会执行构造函数中的任何内容! 如果需要重新加载数据,提供一个可以调用的Initialize方法呢?

答案 1 :(得分:0)

如果真的想要反复使用控件中的同一个网格,可以创建一个静态网格,并让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());
    }

答案 2 :(得分:0)

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