winforms 尽管正在检索数据,但Infragistics UltraCombo不会填充数据

qmb5sa22  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(149)

我有一个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;
    }
}
kgsdhlau

kgsdhlau1#

我看了一下例子:https://www.infragistics.com/help/winforms/infragistics.win.ultrawingrid~infragistics.win.ultrawingrid.ultracombo
我注意到你在内存中构造了一个UltraCombo控件,但它在MainForm上没有表示。当您调用UltraCombo构造函数时,您会清除它。
这是你现在需要尝试的。
1.删除调用this.currentLayoutControl = new CurrentLayoutControl();--这是删除设计器调用。
1.将两个方法从CurrentLayoutControl类移到MainForm中(如我在下面的示例中所示)
1.删除CurrentLayoutControl类。你不需要它这个类正在清除设计器中的那个-- Infragistics为你设置了一些东西,这个类将它清除掉。
1.运行它,它 * 应该 * 工作。
public partial class MainForm:String { public String_String_String_String_String_String_String_String_String_String_String_String_String_String_String_String_String_String_String_String

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;
 }
cnwbcb6i

cnwbcb6i2#

在代码中有很多事情没有发生,因为您没有使用设计器将UltraCombo添加到应用程序表单中。
您可以尝试以下修复。
将以下两行从constructor移动到Load事件处理程序,并更新如下所示:

private void MainForm_Load(object sender, EventArgs e)
{
   currentLayoutControl = new CurrentLayoutControl();
   PopulateLayoutCombo();

   this.Controls.Add(currentLayoutControl);

   currentLayoutControl.DisplayLayout.Bands[0].ColHeadersVisible = false;   
   currentLayoutControl.DisplayLayout.AutoFitStyle = Win.UltraWinGrid.AutoFitStyle.ExtendLastColumn;
   currentLayoutControl.DropDownWidth = 0;
   this.PerformLayout();
}

至少,在此之后,您将在组合框中看到所需的项目。此外,您需要将坐标设置到表单上所需的位置。
我建议在Visual Studio中使用designer:中将有助于自动对UltraCombo控件进行大量调整。

相关问题