2011-12-02 58 views
2

我用网格创建了一个自定义用户控件。我想将这个网格绑定一次,并在我的应用程序中反复使用它。如果我将绑定放在控件中,那么在使用控件时会多次检索数据。我如何将它绑定一次?每次控件初始化时如何避免重新绑定网格?

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

    } 
+0

这不是一个函数,是构造函数(不具有返回类型) – Strillo

回答

0

那么你每次构造对象时都会执行构造函数中的任何东西! 如何提供一个Initialize方法,您可以在需要重新加载数据时调用?

0

如果你真的想反复使用同一个网格在你的控制,你可以创建一个单一的,静电网,并让您ClientLookUp构造它添加到正确的地方面板,或什么,只要一个新的创建。

然而,在你走这条路之前,问问你自己这是否真的是你想要做的。在许多地方存在相同的电网可能会导致您在路上遇到问题。如果你想支持电网编辑,你会发现,改变一个值,改变你的所有其他网格相同的值..

编辑

我试图让下面的代码工作,但我不确定这种做法是否可行。看起来好像您尝试将同一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()); 
    } 
+0

它不是一个真正的网格;它是一个包含我需要在应用程序的许多页面上使用的客户端列表的下拉列表。它永远不会改变或更新。我想最好的方法是创建一个自定义控件,并将其放在任何需要它的地方。我曾希望避免分别约束每一个。 – user948060

+0

那么相同的原则适用。如果你打算在很多地方使用这个下拉菜单,那么尽量缓存它们都使用的**数据**,但是试图缓存实际的下拉菜单,并在许多地方使用**这个**会导致你假设它甚至是可能的,那么伤害比好的更大 –

0

如果要加载的数据只有一次,然后将其加载或者到由控制引用静态变量或一个单独的类。

相关问题