با سلام
استاد من خودم با اطلاعات قبلی کدهای فرم را تکمیل کردم . شاید کمی متفاوت از کدهای شما باشد.
حذف و اضافه دانشجو (ورزشکار) به دوره و ثبت و ویرایش آن به درستی کار میکند.
با تشکر
using DataLayer.Contex;
using DataLayer.Models;
using System.Data;
namespace Gym_Managment.Courses
{
public partial class frmAddOrEditCourse : Form
{
EF_GymManagment_DB_Contex _Contex = new EF_GymManagment_DB_Contex();
public bool editMode = false;
int rowItem = 0;
public int courseId;
public frmAddOrEditCourse()
{
InitializeComponent();
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
private void frmAddOrEditCourse_Load(object sender, EventArgs e)
{
if (editMode)
{
this.Text = "ویرایش دوره";
this.btnSave.Text = "ویرایش";
BindList();
BindDGV();
LoadData();
}
else
{
BindList();
BindDGV();
}
}
void BindList()
{
var coachId = _Contex.Role.Where(r => r.PersonRole == "مربی").Select(p => p.PersonId).Distinct().ToList();
cbCoachName.DataSource = _Contex.People.Where(p => coachId.Contains(p.PersonId))
.Select(p => new
{
p.PersonId,
FullName = p.Name + " " + p.Family
})
.ToList();
cbCoachName.DisplayMember = "FullName";
cbCoachName.ValueMember = "PersonId";
}
void BindDGV()
{
dgvPlayers.AutoGenerateColumns = false;
dgvRegisterPlayer.RowHeadersWidth = 50;
dgvPlayers.RowHeadersWidth = 50;
var playerId = _Contex.Role.Where(r => r.PersonRole == "ورزشکار" )
.Select(p => p.PersonId).Distinct().ToList();
var list = _Contex.People
.Where(p => playerId.Contains(p.PersonId)).ToList();
foreach (var l in list)
{
dgvPlayers.Rows.Add(l.PersonId, l.Name + " " + l.Family, l.Mobile, l.Email);
}
}
#region Vaidation
bool InputValidation()
{
bool isValid = true;
if (string.IsNullOrEmpty(txtCourseName.Text))
{
txtCourseName.BackColor = Color.Yellow;
isValid = false;
}
else
{
txtCourseName.BackColor = Color.White;
}
if (string.IsNullOrEmpty(txtPlayerCount.Text) || txtPlayerCount.Value == 0)
{
txtPlayerCount.BackColor = Color.Yellow;
isValid = false;
}
else
{
txtPlayerCount.BackColor = Color.White;
}
if (string.IsNullOrEmpty(txtCourseHoure.Text) || txtCourseHoure.Value == 0)
{
txtCourseHoure.BackColor = Color.Yellow;
isValid = false;
}
else
{
txtCourseHoure.BackColor = Color.White;
}
return isValid;
}
#endregion
private void btnSave_Click(object sender, EventArgs e)
{
if (InputValidation())
{
if (editMode)
{
var course = _Contex.Courses
.FirstOrDefault(c => c.CourseId == courseId);
course.Title = txtCourseName.Text;
course.CouchId = (int)cbCoachName.SelectedValue;
course.Hours = (int)txtCourseHoure.Value;
course.PlayerCount = (int)txtPlayerCount.Value;
course.Description = txtDescription.Text;
course.IsActive = rbCourseActive.Checked ? true : false;
_Contex.SaveChanges();
if (dgvRegisterPlayer.Rows.Count > 0)
{
for (int i = 0; i < dgvRegisterPlayer.Rows.Count; i++)
{
int playerId = Convert.ToInt32(dgvRegisterPlayer.Rows[i].Cells[0].Value.ToString());
bool exists = _Contex.PlayerInCourses.Any(x =>
x.CourseId == course.CourseId &&
x.PlayerId == playerId);
if (!exists)
{
PlayerInCourse playerInCourse = new PlayerInCourse()
{
CourseId = course.CourseId,
PlayerId = playerId,
RegisterDate = DateTime.Now
};
_Contex.PlayerInCourses.Add(playerInCourse);
}
}
_Contex.SaveChanges();
}
}
else
{
Course course = new Course();
course.Title = txtCourseName.Text;
course.CouchId = (int)cbCoachName.SelectedValue;
course.Hours = (int)txtCourseHoure.Value;
course.PlayerCount = (int)txtPlayerCount.Value;
course.Description = txtDescription.Text;
course.IsActive = rbCourseActive.Checked ? true : false;
_Contex.Courses.Add(course);
_Contex.SaveChanges();
if (dgvRegisterPlayer.Rows.Count > 0)
{
for (int i = 0; i < dgvRegisterPlayer.Rows.Count; i++)
{
string playerId = dgvRegisterPlayer.Rows[i].Cells[0].Value.ToString();
PlayerInCourse playerInCourse = new PlayerInCourse()
{
CourseId = course.CourseId,
PlayerId = int.Parse(playerId),
RegisterDate = DateTime.Now
};
_Contex.PlayerInCourses.Add(playerInCourse);
}
_Contex.SaveChanges();
}
}
this.Close();
this.DialogResult = DialogResult.OK;
}
}
private void LoadData()
{
var corseData = _Contex.Courses.Single(c => c.CourseId == courseId);
txtCourseName.Text = corseData.Title.ToString();
txtCourseHoure.Value = int.Parse(corseData.Hours.ToString());
txtPlayerCount.Value = int.Parse(corseData.PlayerCount.ToString());
txtDescription.Text = corseData.Description.ToString();
cbCoachName.SelectedValue = corseData.CouchId;
if (corseData.IsActive)
{
rbCourseActive.Checked = true;
}
else
{
rbCourseNotActive.Checked = true;
}
var registerPlayerId = _Contex.PlayerInCourses.Where(p => p.CourseId == courseId).Select(p => p.PlayerId).ToList();
foreach (var item in registerPlayerId)
{
var registerPlayer = _Contex.People.Where(p => p.PersonId == item).Single();
dgvRegisterPlayer.Rows.Add(registerPlayer.PersonId, registerPlayer.Name + " " + registerPlayer.Family);
foreach (DataGridViewRow row in dgvPlayers.Rows)
{
if (Convert.ToInt32(row.Cells[0].Value) == item)
{
row.Visible = false;
}
}
}
}
private void dgvRegisterPlayer_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
dgvRegisterPlayer.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
}
private void dgvPlayers_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
dgvPlayers.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
}
private void btnAddPlayer_Click(object sender, EventArgs e)
{
if (dgvPlayers.CurrentRow != null)
{
string playerId = dgvPlayers.CurrentRow.Cells[0].Value.ToString();
string playerName = dgvPlayers.CurrentRow.Cells[1].Value.ToString();
dgvRegisterPlayer.Rows.Add(playerId, playerName);
dgvPlayers.CurrentRow.Visible = false;
}
}
private void btnRemovePlayer_Click(object sender, EventArgs e)
{
if (dgvRegisterPlayer.CurrentRow == null)
return;
int playerId = Convert.ToInt32(dgvRegisterPlayer.CurrentRow.Cells[0].Value);
dgvRegisterPlayer.Rows.Remove(dgvRegisterPlayer.CurrentRow);
foreach (DataGridViewRow row in dgvPlayers.Rows)
{
if (Convert.ToInt32(row.Cells[0].Value) == playerId)
{
row.Visible = true;
}
}
}
}
}






بسیار عالی ، لذت بردم