How to bind MySQL table to datagrid in WPF app

2020-07-27 05:34发布

I've come across this question a lot, but I can't seem to find a satisfying answer. I have a WPF app in c# with a connection to a remote MySQL database. My goal is to select a table from the database and present it in a datagrid. But after this I want to be able to print a selected row (using given report definition files). So I'm interested in a way to populate my datagrid (I know the mysql statements needed) without storing the mysql table locally in, say an ObservableCollection. I just want to see what's in the desired table and later be able to read each record separately to fill out a template (defined in the rdlc file). How can this be done? I'm in MVVM architecture. Thanks a lot!

2条回答
Bombasti
2楼-- · 2020-07-27 06:16
DataTable dt = new DataTable();
using (MySqlConnection conn = new MySqlConnection("Your connection string"))
{
    conn.Open();
    string query = "SELECT * FROM table";
    using (MySqlDataAdapter da = new MySqlDataAdapter(query, conn))
        da.Fill(dt);
}
yourDataGrid.ItemsSource = dt.DefaultView;

This is the code i know to fill a DataGrid with database values.

As for printing, it's a bit mor advanced. I think you should consider a google session.

查看更多
【Aperson】
3楼-- · 2020-07-27 06:17

I changed DeMama's answer a bit to fit MvvmLight pattern:

In your ViewModel:

1.Declare a property:

private DataView tableFromMySql;
public DataView TableFromMySql
{
    get { return tableFromMySql; }
    set
    {
        if (tableFromMySql == value)
            return;
        tableFromMySql = value;
        RaisePropertyChanged("TableFromMySql");
    }
}

2.Assign MySQL table to this property:

DataTable dt = new DataTable();

using (MySqlConnection Conn = new MySqlConnection(connectionStr))
{
    Conn.Open();
    string cmdStr = string.Format("{0} `{1}`", "SELECT * FROM", "yourtable");
    using (MySqlCommand cmdSel = new MySqlCommand(cmdStr, Conn))
    using (MySqlDataAdapter da = new MySqlDataAdapter(cmdSel))
        da.Fill(dt);
}
TableFromMySql = dt.DefaultView;

In your View:

Bind TableFromMySql to DataGrid's ItemsSource,then your table would be seen in DataGrid.

查看更多
登录 后发表回答