问题
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!
回答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.
回答2:
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.
来源:https://stackoverflow.com/questions/17573243/how-to-bind-mysql-table-to-datagrid-in-wpf-app