1

我想从组合框中检索数据并将其填充到数据网格视图中。我正在使用 Visual Studio C# Windows 窗体。我的应用程序使用 MySql 数据库检索列价格、用户和日期的数据。我尝试了这段代码,但它没有在数据网格视图中填充任何内容。起初我没有问题填充我的数据库,但是在我添加组合框以填充数据网格视图之后它不起作用。

这是代码:

public void loadDataGridView_Main()
{
    dgvMain.Rows.Clear();
    List<string>[] detailList = a.mysqlSelect(comboProd.SelectedItem + "Select * From sales");
    for (int i = 0; i < detailList.Length; i++)
    {
        dgvMain.Rows.Add(detailList[i][0], detailList[i][1], detailList[i][2], detailList[i][3]);
    }
}

自动加载表单。

private void frmMain_Load(object sender, EventArgs e)
{
    a = new MyLibrary("localhost", "root", "", "cashieringdb");
    loadDataGridView_Main();
    dataLog();
    fillCombo();
}

comboProd 是我的变量名 comboBox

这是我的fillCombo方法我对此没有问题

public void fillCombo()
{
    string MyConString = "SERVER=localhost;" +
                             "DATABASE=cashieringdb;" +
                                 "UID=root;" +
                              "PASSWORD='';";
    MySqlConnection connection = new MySqlConnection(MyConString);
    string command = "select productAdd from settings";
    MySqlDataAdapter da = new MySqlDataAdapter(command, connection);
    DataTable dt = new DataTable();
    da.Fill(dt);

    comboProd.DataSource = dt;
    comboProd.DisplayMember = "productAdd";
    connection.Close();
}

此功能仅用于添加产品并在 中检索ComboBox,例如,如果我添加 Apple 产品,它将保存到数据库中,然后ComboBox将检索要添加到列表中的产品 apple。

编辑

所以这是我的程序流程。

在我的数据网格视图中,我的数据中有 1ComboBox列和 3 列作为字段GridView。在ComboBox它将填充我在数据库端选择的项目中,它将检索数据库中的任何值。这就是我这样编码的原因。

List<string>[] detailList = a.mysqlSelect(comboProd.SelectedItem + "Select * 

但我不确定这一行。我很怀疑。我认为错误就在这里。

4

2 回答 2

0

使用 DataGridViewComboBoxColumn 类。根据需要设置 DataSource 并分配 ValueMember 和 DisplayMember 列。将 obj 添加到 datagridview

DataGridViewComboBoxColumn dgc = new DataGridViewComboBoxColumn();
dgc.DataSource = ds;
dgc.ValueMember = "columnname1";
dgc.DisplayMember = "columnname2"

dataGridView1.Columns.Add(dgc);
于 2013-04-09T13:31:57.217 回答
0
private void frmMain_Load(object sender, EventArgs e)
{
    a = new MyLibrary("localhost", "root", "", "cashieringdb");
    fillCombo();   //fill combo before calling loadDataGridView_Main()
    loadDataGridView_Main();
    dataLog();    
}

刚换了一个说法。现在检查一下。

于 2013-04-09T13:40:29.217 回答