mysql - 我需要一种通过单击另一个表单上的 datagridview 来在新表单上显示记录的方法

标签 mysql datagridview combobox openform

我有一个带有显示库存的 datagridview 的表单。库存表有一个名为unitid的字段。

我希望它能够工作,这样当我从库存数据 GridView 中选择一条记录时,它必须从例如 frminventorydetails 打开另一个记录,并显示我选择的记录中文本框和组合框中的所有字段。

我可以正常工作,但问题是组合框。它在组合框中没有显示正确的值。当详细信息表单加载时,我有一种方法可以使用单位表中的值加载组合框。但是当详细信息表单加载时,它不会转到适当的显示成员。

当我将组合框以与库存数据网格相同的形式放置时,它可以完美地工作。但当组合框是另一种形式时不起作用。

  private void dginventory_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.Enter)
        {
            try
            {
                string getdetails = @"select * from tblinventory where
                tblinventory.invid='" + Convert.ToInt32(dginventory.CurrentRow.Cells[0].Value.ToString()) + "'";

                performqueries.singleResult(getdetails);

                frmviewinvdetails invdetopen = new frmviewinvdetails();

                if (performqueries.dt.Rows.Count > 0)
                {
                    invdetopen.txtinvid.Text = performqueries.dt.Rows[0].Field<int>("invid").ToString();
                    invdetopen.txtinvcode.Text = performqueries.dt.Rows[0].Field<string>("InventoryCode").ToString();
                    invdetopen.txtInvDescription.Text = performqueries.dt.Rows[0].Field<string>("InvDescription").ToString();
                    invdetopen.txtInvShortText.Text = performqueries.dt.Rows[0].Field<string>("InvShortText").ToString();

                    //here im assigning the unitid to the selectedvalue property of the combobox in the details form.
                    invdetopen.cbunits.SelectedValue = Convert.ToInt32(performqueries.dt.Rows[0].Field<int>("unitid").ToString());

                    }

                   invdetopen.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                //throw;
            }

    // this fills the combobox on the details form when it loads
    private void frmviewinvdetails_Load(object sender, EventArgs e)
    {
       SqlConfig performcrud = new SqlConfig();
        string units = "select * from tblunits";
        performcrud.fill_CBO(units, cbunits);
    }

我希望组合框能够显示我选择的特定项目的适当单位描述,但它只是保留在第一条记录上。

如果组合框与数据网格位于同一表单上,则它有效,但如果我打开一个新表单,则无效。

最佳答案

您没有显示用于设置cbunitsValueMemberDisplayMember 的代码。确保设置了这些属性,然后设置了 ComboBoxDataSource最后您可以使用 SelectedValue .

此外,这可能是一个问题:

string units = "select * from tblunits";

必须匹配属性(显示和值)名称,因此我强烈建议在 SQL 中使用特定字段名称。我不知道它是否适用于“*”。 编辑:我测试了它,它确实适用于星号,因此您只需确保字段名称匹配即可。。使用 DataTable 作为 DataSource 也是一个优势:

dt Datatable = FunctionToGetDataTable("select ID, UnitName as UnitName from tblunits");

那么你可以使用:

invdetopen.cbunits.ValueMember = "ID";
invdetopen.cbunits.ValueMember = "UnitName";
invdetopen.cbunits.ValueMember = dt;

您应该始终能够使用断点停止代码并查看变量。如果您使用DataTable,则可以在 Debug模式下利用 DataTable Visualizer(单击“dt”上的小放大镜),您实际上会将其视为表格。

如果做得正确的话,只需要上面几行就可以了。

关于mysql - 我需要一种通过单击另一个表单上的 datagridview 来在新表单上显示记录的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57884299/

相关文章:

php - php mysql 列的总和不起作用

sql - MySQL 可以使用超过 2 个不同存储引擎的索引吗?

C# - 在 Windows 窗体应用程序中获取 SelectedItem 的值

php - 如何在 laravel 中设置 withCount 条件

php - 这段 php 代码有什么问题?左外连接

时间:2019-03-08 标签:c#datagridviewcolumnautosizemode

c# - 为什么它不将更改从 datagridview 保存到数据表中?

c# - 从 DataGridView 中删除列

c# - 组合框按 ID 选择项目但显示名称

.net - 在 Windows 7 中 DropDownStyle = DropDownList 时,ComboBox.SelectedValue 与显示的文本不匹配