2

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 Answers 2

4

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.

Sign up to request clarification or add additional context in comments.

Comments

1
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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.