我有一个 UltraCombo 框,我需要用来自数据库查询的数据填充它。不幸的是,无论我做什么,数据都不会显示。每次加载表单时,UltraCombo 都是空白的。我已验证数据正在成功检索;我可以使用应该填充 UltraCombo 的相同方法打印查询结果。我已尝试将控件显式添加到 Controls 集合中,并且已尝试为该控件定义一个 DataMember。都没有用。我已经多次重写数据库方法以确保它们与 UltraCombos 兼容。我正在使用 .NET 4.7.0 和 Infragistics 2021.2.
这是我的代码:
public partial class MainForm : Form
{
public CurrentLayoutControl currentLayoutControl;
public MainForm()
{
InitializeComponent();
this.currentLayoutControl = new CurrentLayoutControl();
PopulateLayoutCombo();
}
public void PopulateLayoutCombo()
{
DataTable layouts = currentLayoutControl.LoadUserGridLayouts(suiteConnectionString);
currentLayoutControl.DataSource = layouts;
currentLayoutControl.ValueMember = "User_Grid_Layout_Id";
currentLayoutControl.DisplayMember = "User_Grid_Layout";
}
}
public class CurrentLayoutControl : UltraCombo
{
public DataTable LoadUserGridLayouts(string connString)
{
DataTable dataTable = new DataTable();
SqlConnection conn = new SqlConnection(connString);
string sql = "USE My_Database; SELECT User_Grid_Layout_Id, User_Grid_Layout FROM app.User_Grid_Layouts";
SqlCommand command = new SqlCommand(sql, conn);
conn.Open();
dataTable = ExecuteQuery(connString, command);
conn.Close();
return dataTable;
}
private DataTable ExecuteQuery(string connString, SqlCommand command)
{
DataTable dataTable = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dataTable);
return dataTable;
}
}
我注意到你在内存中构建了一个
UltraCombo
控件,但它在MainForm
上没有表示。当你调用它的 UltraCombo 构造函数时,你就把它擦掉了。
这是您现在需要尝试的。
删除电话
this.currentLayoutControl = new CurrentLayoutControl();
——这是在抹杀设计师。
将这两个方法从 CurrentLayoutControl 类移到 MainForm 中(如下例所示)
摆脱 CurrentLayoutControl 类。你不需要它。那门课正在消灭设计器中的那个——Infragistics 为你设置东西,这堂课把它消灭了。
运行它应该工作。
public partial class MainForm : 表格 { 公共 CurrentLayoutControl currentLayoutControl;
public MainForm()
{
InitializeComponent();
PopulateLayoutCombo();
}
public void PopulateLayoutCombo()
{
DataTable layouts = currentLayoutControl.LoadUserGridLayouts(suiteConnectionString);
currentLayoutControl.DataSource = layouts;
currentLayoutControl.ValueMember = "User_Grid_Layout_Id";
currentLayoutControl.DisplayMember = "User_Grid_Layout";
}
public DataTable LoadUserGridLayouts(string connString)
{
DataTable dataTable = new DataTable();
SqlConnection conn = new SqlConnection(connString);
string sql = "USE My_Database; SELECT User_Grid_Layout_Id, User_Grid_Layout FROM app.User_Grid_Layouts";
SqlCommand command = new SqlCommand(sql, conn);
conn.Open();
dataTable = ExecuteQuery(connString, command);
conn.Close();
return dataTable;
}
private DataTable ExecuteQuery(string connString, SqlCommand command)
{
DataTable dataTable = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dataTable);
return dataTable;
}