0

whats wrong with this code ? i want populate all users in datagridview1 but datagirdview showing nothing .

private void button4_Click( object sender, EventArgs e )
{
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = db.todosUsuario("select usuario from usuarios");
}

//DB class
public DataSet todosUsuario(string query)
{
    DataSet dt= new DataSet();
    try
    {
        MySqlConnection cnn = new MySqlConnection(MysqlConnect());
        cnn.Open();
        MySqlDataAdapter da = new MySqlDataAdapter(query, cnn);
        da.Fill(dt,"Usuario");
        cnn.Close();
    }
    catch(Exception ed)
    {
        MessageBox.Show(ed.ToString());
    }
    return dt;
}
4

2 回答 2

1

您正在将 DataGridView 绑定到 DataSet。
在数据集中有多个表,因此您需要使用 DataMember 属性指定应在 DataGrid 中显示的表。(当您在表格集合中只有一个时也是如此)

dataGridView1.AutoGenerateColumns = true; 
DataSet ds = db.todosUsuario("select usuario from usuarios"); 
dataGridView1.DataMember = ds.Tables[0].TableName;
dataGridView1.DataSource = ds;

您可以将代码绑定更改为单个表

dataGridView1.DataSource = ds.Tables[0];
于 2012-09-03T14:29:34.780 回答
-1

以下可能被认为是一个重要的评论而不是一个答案,这就是为什么我做出了CW的答案。

所呈现的代码存在许多问题。这些代表了早点失去的好习惯。

private void button4_Click(object sender, EventArgs e)
{
    try
    {
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = db.todosUsuario("select usuario from usuarios");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString(), "Exception");
    }
}

//DB class
public DataSet todosUsuario(string query)
{
    DataSet dt = new DataSet();
    using (MySqlConnection cnn = new MySqlConnection(MysqlConnect()))
    {
        cnn.Open();
        using (MySqlDataAdapter da = new MySqlDataAdapter(query, cnn))
        {
            da.Fill(dt, "Usuario");
        }
        cnn.Close();
    }
    return dt;
}

连接和数据适配器对象都实现了IDisposable,因此应该包装在using块中。

此外,让每个方法都关注捕获异常并不是一个好主意,尤其是当您唯一能做的“处理”是显示错误消息时。特别是,通过MessageBox.Show在您的 DB 类中进行调用,您要求它在 Windows 窗体应用程序中运行,并且违反了关注点分离。

相反,我建议您在代码中将异常处理置于非常高的级别。对于 Windows 窗体应用程序,最好将异常处理保留在事件处理程序中,以免异常从事件中“逃脱”。更好的是在全球范围内进行这种最后的处理,但我从未在 WinForms 应用程序中这样做过,因此无法向您展示如何操作。

于 2012-09-03T19:07:28.013 回答