Показать результат запроса SQL в DataGrid в приложении WPF - PullRequest
0 голосов
/ 05 августа 2020

Результат запроса находится в SqlDataReader, и он может иметь гибкое количество столбцов и большое количество строк.

string mySQLQuery= "select * from myTable";
SqlCommand myTableCommand = new SqlCommand(mySQLQuery, MyConnection);
SqlDataReader myReader = null;
myReader = myTableCommand.ExecuteReader();

То, что я должен сделать sh, - это показать результат в DataGrid. Часть .xaml выглядит так:

<DataGrid Name="myDataGrid" SelectionMode="Extended" SelectionUnit="Cell" AutoGenerateColumns="True" AlternatingRowBackground="LightCyan" 
    ItemsSource="{Binding}" IsEnabled="True" IsReadOnly="True" Background="WhiteSmoke" Margin="13,27,8,110" CanUserSortColumns="True">
</DataGrid>

Следующий блок кода в части .xaml.cs для отображения значений моей таблицы в DataGrid является полностью гипотетическим и просто поясняет, что я хочу сделать:

// suppose that I have read the list of headers (column names)
// and suppose a button is clicked and an event is triggered and these codes are fit into that event
List<string> myHeaders = new List<string>() { "ID" , "Name" , "Country" , "City" };
myDataGrid.headers= myHeaders; // no method called "header" in reality
While (myReader.Read())
{
 myDataGrid.RowValues = myReader // no method called "RowValues" in reality
}

Я предпочитаю решение без отдельного класса для управления каждым столбцом DataGrid, потому что тогда трудно иметь гибкое количество столбцов. И, очевидно, я sh мои результаты будут такими:

 ID   |  Name  |  Country  | City
------------------------------------
 123  |  John  |  England  | London
------------------------------------
 456  |  Jane  |  Ireland  | Dublin
 ...     ...        ...       ... 

Ни один из ответов в этой ссылке не помог: Как отображать SQL результаты поиска в сетке данных с использованием WPF

1 Ответ

0 голосов
/ 05 августа 2020

Решение :

Благодаря «user1672994» это решение теперь работает:

string mySQLQuery= "select * from myTable";
SqlCommand myTableCommand = new SqlCommand(mySQLQuery, MyConnection);
DataTable dt = new DataTable();
SqlDataAdapter a = new SqlDataAdapter(myTableCommand );
a.Fill(dt);
myDataGrid.ItemsSource = dt.DefaultView;
...