【问题标题】:How to properly use a DataGridView in C#如何在 C# 中正确使用 DataGridView
【发布时间】:2013-04-20 07:04:11
【问题描述】:

嗯,这是一个非常非常广泛的问题。我做了很多研究,但我仍然很困惑。

所以,我的问题是我有一个小 C# 程序连接到 SQL 数据库。 通过C#接口我可以将数据插入我的SQL数据库(我知道是因为我在MySQLWorkbench中检查过,数据都在那里),但我想看到它,所以我可以根据需要进行编辑、更新和擦除;为此,我需要使用 DataGridView,但这太复杂了,我看过很多信息,这让我更加困惑。

我将对我的 C# 程序进行几乎完整的复制粘贴:

private void Form1_Shown(object sender, EventArgs e)
    {
        conexion.Open();
        textBox2.Focus();
        try
        {
            DataSet ds = new DataSet();
            MySqlDataAdapter da = new MySqlDataAdapter("SELECT cveestado, nombre FROM tbestados", conexion);
            da.Fill(ds, "FillDropDown");
            comboBox1.DisplayMember = "Nombre";
            comboBox1.ValueMember = "CveEstado";
            comboBox1.DataSource = ds.Tables["FillDropDown"];
            conexion.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Guardar();
    }

    private void Guardar()
    {
        if (textBox2.Text == "")
        {
            MessageBox.Show("Ingrese un nombre", "Error");
            textBox2.Focus();
        }
        else if (comboBox1.SelectedItem.ToString() == "")
        {
            MessageBox.Show("Elija un estado", "Error");
            comboBox1.Focus();
        }
        else
        {
            conexion.Open();
            try
            {
                cmd.CommandText = "insert into tbmunicipios (nombre, cveestado) values ('" + textBox2.Text + "', '" + comboBox1.SelectedValue.ToString() + "')";
                cmd.ExecuteNonQuery();
                cmd.Clone();
                MessageBox.Show("Datos Guardados", "Mensaje");
                conexion.Close();
                textBox2.Text = "";
                comboBox1.Text = "";
                textBox2.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }

上面我显示了一个“Nombre”{name},但我在一个组合框中获得了一个“Clave”{Id};我想对我的 DataGridView 做同样的事情;但我再说一遍,我看过很多信息,但这一切都让我更加困惑。

而且,为了清楚起见,我还要复制粘贴我的 SQL 代码:

Create table tbEstados
(
    CveEstado int not null,
    Nombre varchar (45) not null,
    Constraint pkCveEstado Primary Key (CveEstado)
)Engine=Innodb;
Create table tbMunicipios
(
    CveMunicipio int not null AUTO_INCREMENT,
    Nombre varchar (45) not null,
    CveEstado int not null,
    Constraint pkCveMunicipio Primary Key (CveMunicipio),
    Constraint fkCVeEdo Foreign Key (CveEstado) references tbEstados (CveEstado)
)Engine=Innodb;

提前感谢您的任何回答:D

【问题讨论】:

  • 兄弟尽量用英文写好让大家看懂
  • 是的,我想这是我犯的一个小错误,但逻辑就在那里。我会在我的下一个问题中考虑它@rummykhan。
  • 我已经回答了,检查一下,告诉我你在找什么......

标签: c# sql winforms datagridview


【解决方案1】:

兄弟,我建议使用 DataTable 而不是像这样的 DataSet 并在您的 UI 上拖动 DataGridView

private void Form1_Shown(object sender, EventArgs e)
{
    conexion.Open();
    textBox2.Focus();
    try
    {
        DataTable dt = new DataTable();
        MySqlDataAdapter da = new MySqlDataAdapter("SELECT cveestado, nombre FROM tbestados", conexion);
        da.Fill(dt);
        //Here Comes your DataGridView
        DataGridView1.DataSource = dt;
        conexion.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

}

我正在做的最佳实践是在Form_Load 事件中调用此方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 2020-08-26
    • 2013-08-26
    • 1970-01-01
    • 2015-07-12
    • 2013-04-10
    相关资源
    最近更新 更多