2011-12-02 33 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

如果要加載的數據只有一次,然後將其加載或者到由控制引用靜態變量或一個單獨的類。

相關問題