Data transfer WPF

When you select a room, the RoomId is passed to another window that displays tasks based on the RoomId.
I select a room, goes to another window, but no tasks are displayed + I tried to add a task, but couldn’t because RoomId = 0.
I checked via MessageBox, RoomId is passed when loading tasks, when initializing RoomView, but on the button RoomId = 0.

        private void ExecuteShowRoomViewCommand(object obj)
        {
            RoomWindow roomWindow = new RoomWindow();
            if (roomWindow.ShowDialog() == true || roomWindow.IsRoomCreated)
            {

                RoomView roomView = new RoomView(roomWindow.RoomId);
                CurrentChildView = new RoomViewModel();
                Caption = roomWindow.RoomName;
                Icon = PackIconKind.Class;

            }
        }
namespace TaskManagement
{
    /// <summary>
    /// Interaction logic for RoomWindow.xaml
    /// </summary>
    public partial class RoomWindow : Window
    {
        string connectionString = "Data Source=DESKTOP-FTLJ7LQ\MSSQLS;Initial Catalog=TaskManagement;Integrated Security=True;";
        public bool IsRoomCreated { get; private set; } = false;
        public string RoomName { get; private set; }
        public string AccessCode { get; private set; }
        public int RoomId { get; private set; }

        public RoomWindow()
        {
            InitializeComponent();
            LoadUserRooms();
        }

        private void LoadUserRooms()
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    string query = @"SELECT Room.RoomId, Room.RoomName 
                                     FROM Room
                                     INNER JOIN RoomUser ON Room.RoomId = RoomUser.RoomId
                                     WHERE RoomUser.UserId = @UserId";
                    using (SqlCommand command = new SqlCommand(query, connection))
                    {
                        command.Parameters.AddWithValue("@UserId", MainWindow.CurrentUserId);
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            List<Room> rooms = new List<Room>();
                            while (reader.Read())
                            {
                                rooms.Add(new Room
                                {
                                    RoomId = reader.GetInt32(0),
                                    RoomName = reader.GetString(1)
                                });
                            }
                            RoomListBox.ItemsSource = rooms;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error occurred while loading rooms: {ex.Message}");
            }
        }

        private void RoomListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (RoomListBox.SelectedItem is Room selectedRoom)
            {
                RoomId = selectedRoom.RoomId;
                RoomName = selectedRoom.RoomName;
                MessageBox.Show($"Room selected: {RoomName}");
                MessageBox.Show($"Room selected: {RoomId}");
                MessageBox.Show($"Room selected: {MainWindow.CurrentUserId}");
                IsRoomCreated = true;
                this.Close();
            }
        }

        private void JoinRoomButton_Click(object sender, RoutedEventArgs e)
        {
            string accessCode = AccessCodeTextBox.Text.Trim();
            if (string.IsNullOrWhiteSpace(accessCode))
            {
                MessageBox.Show("Please enter the access code.");
                return;
            }

            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    string query = @"SELECT Room.RoomId, Room.RoomName 
                                     FROM Room 
                                     INNER JOIN AccessCode ON Room.AccessCodeId = AccessCode.AccessCodeId 
                                     WHERE AccessCode.AccessCode = @AccessCode AND AccessCode.ExpirationDate > GETDATE()";
                    using (SqlCommand command = new SqlCommand(query, connection))
                    {
                        command.Parameters.AddWithValue("@AccessCode", accessCode);
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                RoomId = reader.GetInt32(0);
                                RoomName = reader.GetString(1);
                                MessageBox.Show($"You have joined the room: {RoomName}");
                                IsRoomCreated = true;
                                // Adding record to RoomUser table
                                AddUserToRoom(RoomId, MainWindow.CurrentUserId);
                                this.Close();
                            }
                            else
                            {
                                MessageBox.Show("Invalid access code or the code has expired.");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error occurred while joining the room: {ex.Message}");
            }
        }

        private void CreateRoomButton_Click(object sender, RoutedEventArgs e)
        {
            RoomName = RoomNameTextBox.Text.Trim(); // Ensure no extra spaces
            if (!string.IsNullOrWhiteSpace(RoomName))
            {
                AccessCode = GenerateAccessCode();

                try
                {
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        connection.Open();

                        // Insert AccessCode into AccessCode table
                        string insertAccessCodeQuery = @"INSERT INTO AccessCode (AccessCode, DateGenerated, ExpirationDate) 
                                                         OUTPUT INSERTED.AccessCodeId
                                                         VALUES (@AccessCode, @DateGenerated, @ExpirationDate)";
                        using (SqlCommand command = new SqlCommand(insertAccessCodeQuery, connection))
                        {
                            command.Parameters.AddWithValue("@AccessCode", AccessCode);
                            command.Parameters.AddWithValue("@DateGenerated", DateTime.Now);
                            command.Parameters.AddWithValue("@ExpirationDate", DateTime.Now.AddDays(30)); // For example, the code is valid for 30 days

                            int accessCodeId = (int)command.ExecuteScalar();

                            // Insert Room into Room table
                            string insertRoomQuery = "INSERT INTO Room (RoomName, AccessCodeId) VALUES (@RoomName, @AccessCodeId)";
                            using (SqlCommand roomCommand = new SqlCommand(insertRoomQuery, connection))
                            {
                                roomCommand.Parameters.AddWithValue("@RoomName", RoomName);
                                roomCommand.Parameters.AddWithValue("@AccessCodeId", accessCodeId);
                                roomCommand.ExecuteNonQuery();
                            }
                        }
                    }
                    IsRoomCreated = true;
                    MessageBox.Show($"Room '{RoomName}' created with access code: {AccessCode}");
                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"An error occurred while creating the room: {ex.Message}");
                }
            }
            else
            {
                MessageBox.Show("Please enter the room name.");
            }
        }

        private string GenerateAccessCode()
        {
            // Generate access code
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            var random = new Random();
            var result = new StringBuilder(8); // Access code length is 8 characters
            for (int i = 0; i < 8; i++)
            {
                result.Append(chars[random.Next(chars.Length)]);
            }
            return result.ToString();
        }

        private void AddUserToRoom(int roomId, int userId)
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    string insertRoomUserQuery = "INSERT INTO RoomUser (RoomId, UserId, RoleId) VALUES (@RoomId, @UserId, @RoleId)";
                    using (SqlCommand command = new SqlCommand(insertRoomUserQuery, connection))
                    {
                        command.Parameters.AddWithValue("@RoomId", roomId);
                        command.Parameters.AddWithValue("@UserId", userId);
                        command.Parameters.AddWithValue("@RoleId", 1); // Role "user" (assuming user role ID is 1)
                        command.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error occurred while adding the user to the room: {ex.Message}");
            }
        }
    }
}

namespace TaskManagement
{
    /// <summary>
    /// Interaction logic for RoomView.xaml
    /// </summary>
    public partial class RoomView : UserControl
    {
        private string connectionString = "Data Source=DESKTOP-FTLJ7LQ\MSSQLS;Initial Catalog=TaskManagement;Integrated Security=True;";

        public int RoomId { get;  set; }

        public RoomView()
        {
            InitializeComponent();
            DataContext = this;
        }

        public RoomView(int roomId) : this()
        {
            RoomId = roomId;
            List<RoomTask> taskItems = LoadData(roomId);
            dataGridTask1.ItemsSource = taskItems;
        }

        private List<RoomTask> LoadData(int roomId)
        {
            List<RoomTask> taskList = new List<RoomTask>();

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                string sqlQuery = @"SELECT RoomTask.TaskId, RoomTask.TaskName, RoomTask.TaskDateCreation, RoomTask.TaskDateCompletion, RoomTask.TaskPriority, RoomTask.TaskStatus, 
                                    Project.ProjectName 
                                    FROM RoomTask 
                                    INNER JOIN Project ON RoomTask.ProjectId = Project.ProjectId
                                    WHERE RoomTask.RoomId = @RoomId";
                using (SqlCommand command = new SqlCommand(sqlQuery, connection))
                {
                    command.Parameters.AddWithValue("@RoomId", roomId);
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            RoomTask taskItem = new RoomTask
                            {
                                TaskId = Convert.ToInt32(reader["TaskId"]),
                                TaskName = reader["TaskName"].ToString(),
                                TaskDateCreation = Convert.ToDateTime(reader["TaskDateCreation"]),
                                TaskDateCompletion = reader["TaskDateCompletion"] != DBNull.Value ? Convert.ToDateTime(reader["TaskDateCompletion"]) : (DateTime?)null,
                                TaskPriority = reader["TaskPriority"].ToString(),
                                TaskStatus = reader["TaskStatus"].ToString(),
                                Project = new ProjectItem { ProjectName = reader["ProjectName"].ToString() }
                            };
                            taskList.Add(taskItem);
                        }
                    }
                }
            }
            return taskList;
        }

        private void AddTaskButton_Click(object sender, RoutedEventArgs e)
        {
            if (RoomId == 0)
            {
                MessageBox.Show("Invalid room ID.");
                return;
            }
            string taskName = textBoxTaskName.Text.Trim();
            if (string.IsNullOrWhiteSpace(taskName))
            {
                MessageBox.Show("Please enter the task name.");
                return;
            }

            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    string query = @"INSERT INTO RoomTask (TaskName, TaskDateCreation, TaskPriority, TaskStatus, ProjectId, RoomId) 
                                     VALUES (@TaskName, @TaskDateCreation, @TaskPriority, @TaskStatus, @ProjectId, @RoomId)";
                    using (SqlCommand command = new SqlCommand(query, connection))
                    {
                        command.Parameters.AddWithValue("@TaskName", taskName);
                        command.Parameters.AddWithValue("@TaskDateCreation", DateTime.Now);
                        command.Parameters.AddWithValue("@TaskPriority", "Medium");
                        command.Parameters.AddWithValue("@TaskStatus", "In Progress");
                        command.Parameters.AddWithValue("@ProjectId", GetSelectedProjectId());
                        command.Parameters.AddWithValue("@RoomId", RoomId);

                        command.ExecuteNonQuery();
                    }
                }
                List<RoomTask> taskItems = LoadData(RoomId);
                dataGridTask1.ItemsSource = taskItems;
                textBoxTaskName.Clear();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error occurred while adding the task: {ex.Message}");
            }
        }

        private int GetSelectedProjectId()
        {
            // Returns the ID of the selected project, here you need to implement the logic to get ProjectId
            return 1; // Example
        }

        private void textBoxTaskName_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                AddTaskButton_Click(sender, e);
            }
        }
    }
}

When you select a room, the RoomId is passed to another window that displays tasks based on the RoomId.
I select a room, goes to another window, but no tasks are displayed + I tried to add a task, but couldn’t because RoomId = 0.
I checked via MessageBox, RoomId is passed when loading tasks, when initializing RoomView, but on the button RoomId = 0.

New contributor

Hezee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật