UWP для привязки данных
Привет!
Мне немного трудно понять, как привязать мою базу данных SQLite к моей datagrid. Я пробовал несколько разных способов, как я уверен, вы увидите в приведенном ниже коде, но, похоже, просто сбился с пути.
Может ли кто-нибудь увидеть, где я ошибаюсь? Любая помощь вообще была бы очень признательна :)
Итак, вот мой класс базы данных:
namespace TestApp2 { public static class DB { //private static SuspendingEventHandler App_Suspending; public async static void InitializeDatabase() { await ApplicationData.Current.LocalFolder.CreateFileAsync("sqliteSample.db", CreationCollisionOption.OpenIfExists); string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db"); using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}")) { //Creation of the database table db.Open(); String tableCommand1 = "CREATE TABLE IF NOT EXISTS EmployeeTable (Employee_ID INTEGER PRIMARY KEY AUTOINCREMENT, First_Name NVARCHAR(20) NULL, Last_Name NVARCHAR(40) NULL, Address NVARCHAR(50) NULL, Position NVARCHAR(20) NULL, Pay_Rate DOUBLE NULL, Tax_Code NVARCHAR(10) NULL, Sex NVARCHAR(20), NI NVACHAR(10), Emergency_Details NVARCHAR(100))"; SqliteCommand createTable = new SqliteCommand(tableCommand1, db); try { createTable.ExecuteReader(); } catch (SqliteException ee) { } } } //public static List<Person> Grab_Entries() //{ // List<Person> entries = new List<Person>(); // using (SqliteConnection db = new SqliteConnection("Filename=sqliteSample.db")) // { // db.Open(); // SqliteCommand selectCommand = new SqliteCommand("SELECT * from EmployeeTable", db); // SqliteDataReader query; // try // { // query = selectCommand.ExecuteReader(); // } // catch (SqliteException) // { // //Handle error // return entries; // } // while (query.Read()) // { // // entries.Add(query.GetString(0)); // } // db.Close(); // } // return entries;
Все это должно работать великолепно.
Это моя главная страница:
namespace TestApp2 { public sealed partial class MainPage : Page { List<Person> persons; public MainPage() { this.InitializeComponent(); DB.InitializeDatabase(); } private void App_Suspending(object sender, SuspendingEventArgs e) { throw new NotImplementedException(); } private async void searchEmployee_Click(object sender, RoutedEventArgs e) { await new MessageDialog("Test").ShowAsync(); } private void rota_Click(object sender, RoutedEventArgs e) { this.Frame.Navigate(typeof(Rota)); } private void emailEmployee_Click(object sender, RoutedEventArgs e) { this.Frame.Navigate(typeof(email)); } private void addEmployee_Click(object sender, RoutedEventArgs e) { this.Frame.Navigate(typeof(AddEmployee)); } public void EmployeeGrid_Loaded(object sender, RoutedEventArgs e) { //string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db"); //using (SqliteConnection db = // new SqliteConnection($"Filename={dbpath}")) //{ // string query = "select * from EmployeeTable"; // SqlDataAdapter sqlDataAdap = new SqlDataAdapter(query, dbpath); // DataSet _Bind = new DataSet(); // sqlDataAdap.Fill(_Bind, "MyDataBinding"); // EmployeeGrid.DataContext = _Bind; // db.Close(); //DB.InitializeDatabase(); //DB.Grab_Entries(); // } } private void showAdmin_Click(object sender, RoutedEventArgs e) { this.Frame.Navigate(typeof(Admin)); } } }
Моя Персона Класс:
namespace TestApp2 { using static DB; public class Person { public int PersonId { get; set; } public int DepartmentId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Position { get; set; } public string Address { get; set; } public double PayratePH { get; set; } public string Sex { get; set; } public string TaxCode { get; set; } public string EmergencyDetails { get; set; } public string Email { get; set; } public List<String> Grab_Entries() { List<String> entries = new List<string>(); using (SqliteConnection db = new SqliteConnection("Filename=sqliteSample.db")) { db.Open(); SqliteCommand selectCommand = new SqliteCommand("SELECT First_Name from EmployeeTable", db); SqliteDataReader query; try { query = selectCommand.ExecuteReader(); } catch (SqliteException) { //Handle error return entries; } while (query.Read()) { entries.Add(query.GetString(0)); } db.Close(); } return entries; } } }
и, наконец, главная страница язык XAML, который ведет мои сетки:
<controls:DataGrid x:Name="EmployeeGrid" Margin="170,55,35,35" ItemsSource="{x:Bind persons}" CanUserSortColumns="True" AutoGenerateColumns="False" Background="Black" Loaded="EmployeeGrid_Loaded"> <controls:DataGrid.Columns> <controls:DataGridTextColumn Header="Employee ID" Binding="{Binding PersonId}"/> <controls:DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/> <controls:DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/> <controls:DataGridTextColumn Header="Address" Binding="{Binding Address}"/> <controls:DataGridTextColumn Header="Position" Binding="{Binding Position}"/> <controls:DataGridTextColumn Header="Pay Rate (ph)" Binding="{Binding PayratePH}"/> <controls:DataGridTextColumn Header="Sex" Binding="{Binding Sex}"/> <controls:DataGridTextColumn Header="TaxCode" Binding="{Binding TaxCode}"/> <controls:DataGridTextColumn Header="Email" Binding="{Binding Email}"/> <controls:DataGridTextColumn Header="Emergency Contact" Binding="{Binding EmergencyDetails}"/> <controls:DataGridCheckBoxColumn Header="Selected" /> </controls:DataGrid.Columns>
Ах, наконец-то я осознаю, что мои записи не параметризованы, что будет исправлено, как только я увижу, что сетка наконец заполняется.
Что я уже пробовал:
Я попытался создать метод grab_entries в базе данных и связать его с помощью загруженного события для сетки, а также попытался использовать базу данных из того же метода с другой реализацией.
Gerry Schmitz
Это то, что я бы назвал выбросом. Существует очень мало кода, связанного с реальной задачей. Возьмите "рабочий пример" и начните с этого.
Member 14616529
Спасибо за ответ, я довольно новичок в этом деле, как вы, вероятно, можете сказать. Неужели, честно говоря, у меня нет способа показать данные оттуда, где я нахожусь?
Gerry Schmitz
Смотреть ниже.
Member 14616529
Спасибо за ссылку