我用网格创建了一个自定义用户控件。我想绑定一次这个网格,并在我的应用程序中反复使用它。如果我将绑定放在控件中,则在使用控件时检索数据的次数。我怎么只绑定一次??
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 :(得分: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)
如果只想加载一次数据,则将其加载到静态变量或控件引用的单独类中。