Использовать серверную базу данных SQL в приложении UWP (имя не существует в текущем контексте) - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь следовать Руководству по использованию сервера SQL в учебном пособии по приложению UWP, которое можно найти здесь: https://docs.microsoft.com/en-us/windows/uwp/data-access/sql-server-databases

Я следовал учебному пособию, но продолжаю получать те же ошибки в том же месте.

Сообщения об ошибках

Я использую таблицу Employee вместо таблицы Products, как в учебном пособии, но я пробовал использовать te product таблица в соответствии с руководством, и это приводит к ошибкам в тех же местах.

По какой-то причине он не может ссылаться на метод ObservableCollection из класса product / employee и не может связывать атрибуты в файле xaml.

Employee.cs вместо класса продукта:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinApp
{
    public class Employee : INotifyPropertyChanged
    {
        public int EmployeeID { get; set; }
        public string LastName { get; set; } = string.Empty;
        public string FirstName { get; set; } = string.Empty;
        public string Title { get; set; }
        public string TitleOfCourtesy { get; set; }
        public DateTime? BirthDate { get; set; }
        public DateTime? HireDate { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string Region { get; set; }
        public string PostalCode { get; set; }
        public string Country { get; set; }
        public string HomePhone { get; set; }
        public string Extension { get; set; }

        public byte[] Photo { get; set; }

        public string Notes { get; set; }
        public int ReportsTo { get; set; }
        public string PhotoPath { get; set; }
        public Employee Manager { get; set; }


        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }



        public ObservableCollection<Employee> GetEmployees(string connectionString)
        {
            const string GetEmployeesQuery = "select * FROM Employee";

            var employees = new ObservableCollection<Employee>();
            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    if (conn.State == System.Data.ConnectionState.Open)
                    {
                        using (SqlCommand cmd = conn.CreateCommand())
                        {
                            cmd.CommandText = GetEmployeesQuery;
                            using (SqlDataReader reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    var emp = new Employee();
                                    emp.EmployeeID = reader.GetInt16(0);
                                    emp.LastName = reader.GetString(1);
                                    emp.FirstName = reader.GetString(2);

                                    employees.Add(emp);
                                }
                            }
                        }
                    }
                }
                return employees;
            }
            catch (Exception eSql)
            {
                Debug.WriteLine("Exception: " + eSql.Message);
            }
            return null;
        }

    }

}

Обнаружена ошибка atMainPage.xaml.cs, GetEmployees не существует в текущем контексте:

using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace WinApp
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            InventoryList.ItemsSource = GetEmployees((App.Current as App).ConnectionString);
        }
    }

}

MainPage. xaml, где существует ошибка привязки:

<Page
    x:Class="WinApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WinApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <Grid Background="{ThemeResource SystemControlAcrylicWindowBrush}">
            <RelativePanel>
                <ListView Name="InventoryList"
                  SelectionMode="Single"
                  ScrollViewer.VerticalScrollBarVisibility="Auto"
                  ScrollViewer.IsVerticalRailEnabled="True"
                  ScrollViewer.VerticalScrollMode="Enabled"
                  ScrollViewer.HorizontalScrollMode="Enabled"
                  ScrollViewer.HorizontalScrollBarVisibility="Auto"
                  ScrollViewer.IsHorizontalRailEnabled="True"
                  Margin="20">
                    <ListView.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal"  >
                                <TextBlock Text="ID" Margin="8,0" Width="50" Foreground="DarkRed" />
                                <TextBlock Text="Product description" Width="300" Foreground="DarkRed" />
                                <TextBlock Text="Packaging" Width="200" Foreground="DarkRed" />
                                <TextBlock Text="Price" Width="80" Foreground="DarkRed" />
                                <TextBlock Text="In stock" Width="80" Foreground="DarkRed" />
                            </StackPanel>
                        </DataTemplate>
                    </ListView.HeaderTemplate>
                    <ListView.ItemTemplate>
                        <DataTemplate x:DataType="local:Employee">
                            <StackPanel Orientation="Horizontal" >
                                <TextBlock Name="ItemId"
                                    Text="{x:Bind EmployeeID}"
                                    Width="50" />
                                <TextBlock Name="ItemName"
                                    Text="{x:Bind FirstName}"
                                    Width="300" />
                                <TextBlock Text="{x:Bind LastName}"
                                   Width="200" />

                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </RelativePanel>
        </Grid>
    </Grid>
</Page>

1 Ответ

0 голосов
/ 07 апреля 2020

Ваш метод GetEmployees определен в классе Employee, который нельзя использовать непосредственно в классе MainPage.

Попробуйте это:

  1. Изменить * Метод 1009 * должен быть методом stati c, чтобы его мог вызывать класс
public static ObservableCollection<Employee> GetEmployees(string connectionString)
{
    //...
}
Добавьте имя класса перед вызовом
InventoryList.ItemsSource = Employee.GetEmployees((App.Current as App).ConnectionString);

Если вы не добавите соответствующую ссылку, соответствующий тип (например, Employee) будет иметь волнистую линию в редактор кода. Переместите курсор на волнистую линию, появится небольшая лампочка, после нажатия которой вы можете ввести соответствующее пространство имен (это также относится к XAML).

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...