, поэтому в моем приложении есть пункт меню администрирования, который извлекается из моей модели представления как ItemSource
, который извлекается из SQL и добавляется к ObservableCollection
.
Панель администратора
Я бы хотел, чтобы он обновил SQL при нажатии кнопки разрешения на обновление. Вот мой DataGrid
XAML:
<GroupBox Header="Update User Permissions">
<DataGrid ItemsSource="{x:Static model:ViewModel.Users}" AutoGenerateColumns="False" IsTextSearchEnabled="True">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn IsReadOnly="True" Header="Username" Binding="{Binding Username}"/>
<DataGridCheckBoxColumn Header="Add Truck" Binding="{Binding CanAddTruck}"/>
<DataGridCheckBoxColumn Header="Park Truck" Binding="{Binding CanParkTruck}"/>
<DataGridCheckBoxColumn Header="Load Truck" Binding="{Binding CanLoadTruck}"/>
<DataGridCheckBoxColumn Header="Admin" Binding="{Binding IsAdmin}"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<UniformGrid Columns="2" Grid.Row="2">
<Button Content="Cancel"/>
<Button Content="Update permissions" Command="{Binding SaveUserDB_Command}" />
</UniformGrid>
Модель пользователя:
public AllUsers()
{
SaveUserDB_Command = new RelayCommand(SaveUserDB_Command_Execute, SaveUserDB_Command_CanExecute);
}
public AllUsers(SqlDataReader reader)
{
Name = reader.GetString("Name");
Username = reader.GetString("Username");
CanAddTruck = Convert.ToBoolean(reader["CanAddTruck"]);
CanParkTruck = Convert.ToBoolean(reader["CanParkTruck"]);
CanLoadTruck = Convert.ToBoolean(reader["CanLoadTruck"]);
IsAdmin = Convert.ToBoolean(reader["IsAdmin"]);
}
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; RaisePropertyChanged("Name"); }
}
private string _Username;
public string Username
{
get { return _Username; }
set { _Username = value; RaisePropertyChanged("Username"); }
}
private bool _CanAddTruck;
public bool CanAddTruck
{
get { return _CanAddTruck; }
set { _CanAddTruck = value; RaisePropertyChanged("CanAddTruck"); }
}
private bool _CanParkTruck;
public bool CanParkTruck
{
get { return _CanParkTruck; }
set { _CanParkTruck = value; RaisePropertyChanged("CanParkTruck"); }
}
private bool _CanLoadTruck;
public bool CanLoadTruck
{
get { return _CanLoadTruck; }
set { _CanLoadTruck = value; RaisePropertyChanged("CanLoadTruck"); }
}
private bool _IsAdmin;
public bool IsAdmin
{
get { return _IsAdmin; }
set { _IsAdmin = value; RaisePropertyChanged("IsAdmin"); }
}
public RelayCommand SaveUserDB_Command { get; private set; }
void SaveUserDB_Command_Execute(object param)
{
Debug.Print("Not Working");
using var conn = new SqlConnection(Settings.Default.ConnectionString);
conn.Open();
string query = @"IF EXISTS(SELECT * FROM dbo.Permissions WHERE Username = @user)
UPDATE dbo.Permissions
SET CanAddTruck = @addTruck, CanParkTruck = @parkTruck, CanLoadTruck = @loadTruck, IsAdmin = @admin
WHERE Username = @user
ELSE
INSERT INTO dbo.Permissions(Name, Username, CanAddTruck, CanParkTruck, CanLoadTruck, IsAdmin) VALUES(@name, @user, @addTruck, @parkTruck, @loadTruck, @admin);";
var cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@name", Name);
cmd.Parameters.AddWithValue("@user", Username);
cmd.Parameters.AddWithValue("@addTruck", CanAddTruck);
cmd.Parameters.AddWithValue("@parkTruck", CanParkTruck);
cmd.Parameters.AddWithValue("@loadTruck", CanLoadTruck);
cmd.Parameters.AddWithValue("@admin", IsAdmin);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
bool SaveUserDB_Command_CanExecute(object param)
{
return true;
}
Просмотр модели:
public static void GetUsers()
{
Users.Clear();
using var conn = new SqlConnection(Settings.Default.ConnectionString);
conn.Open();
string qry = "SELECT * FROM dbo.Permissions";
var cmd = new SqlCommand(qry, conn);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
Users.Add(new AllUsers(reader));
}
conn.Close();
}
public static ObservableCollection<AllUsers> Users { get; set; } = new ObservableCollection<AllUsers>();
Нажатие на обновление кнопка permissions должна увидеть все изменения в DataGrid и скопировать на SQL. Я думаю, что мне нужно получить значения строк, но я теряюсь, как. Некоторая помощь будет оценена!
Спасибо.