如何避免每次初始化控件时重新绑定网格
本文关键字:新绑定 绑定 网格 何避免 初始化 控件 | 更新日期: 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());
}