10-07-19, 04:03 PM
(10-07-19, 03:27 PM)asemshahen5 كتب :اولا فعلا نا بشكرك على مجهودك(10-07-19, 05:05 AM)amonem كتب :(10-07-19, 03:46 AM)asemshahen5 كتب : هل جربت الكود عند الانتقال من خلية الاسم الى خلية اخرى في سجل جديد تتم عملية حفظ سجل جديد و عند التعديل في أي خلية محفوظة والانتقال الى خلية اخرى تتم عملية التعديل تماما .
عندي سؤال ممكن تشرح هذه النقطة : عند اختيار أكثر من بند للموظف بيتم اضافه سطر واحد فقط فهذا مستحيل لان الكود مكتوب في حدث dgvEmployee_CellValueChanged
ضع مثال مع وضع علامات في أسطر الكود الذي تريد تعديله .
أما بالنسبة لوضع حلقة فور فلا داعي لها لأنه عند كتابة أي شيء في أي خلية والانتقال لخلية أخرى يتم حفظ الخلية السابقة سواء كانت في سجل جديد او سجل مراد تعديله .
انا اسف لو بتقل عليك
ونا معاك فى كل كلامك لكن الفرق انى وضع الكود في مفتاح خاص بالحفظ
وليس فى حدث dgvEmployee_CellValueChanged
ولذلك يفضل استخدامحلقة فور
مفيش مشكلة لكن للعلم حلقة الفور تسبب بطء في عمل البرنامج أي لو في عندك 100 سجل أو أكثر .
عمل حفظ سجل جديد أو تعديل سجل موجود سيأخذ وقت طويل و اذا كان البرنامج على شبكة سيسبب المشاكل .
PHP كود :
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dgvEmployee.Rows.Count - 1; i++)
{
try
{
using (SqlConnection sqlCon = new SqlConnection(@"server=.; Database=Accounts; Integrated Security=true"))
{
String sqlstrdd = "select * from Employee where EmployeeID='" + dgvEmployee.Rows[i].Cells[0].Value + "'";
System.Data.SqlClient.SqlDataAdapter dt1 = new System.Data.SqlClient.SqlDataAdapter(sqlstrdd, sqlCon);
DataTable dset1 = new DataTable();
dset1.Clear();
dt1.Fill(dset1);
//----------------------------------------
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandType = CommandType.Text;
string SqlStr = string.Empty;
if (dset1.Rows.Count == 0)//Insert
{
SqlStr = "INSERT INTO Employee(Name,PositionID,Office,Age)VALUES (@Name,@PositionID,@Office,@Age)";
sqlCmd = new SqlCommand(SqlStr, sqlCon);
sqlCmd.Parameters.AddWithValue("@Name", dgvEmployee.Rows[i].Cells[1].Value == DBNull.Value ? "" : dgvEmployee.Rows[i].Cells[1].Value.ToString());
sqlCmd.Parameters.AddWithValue("@PositionID", Convert.ToInt32(dgvEmployee.Rows[i].Cells[2].Value == DBNull.Value ? "0" : dgvEmployee.Rows[i].Cells[2].Value.ToString()));
sqlCmd.Parameters.AddWithValue("@Office", dgvEmployee.Rows[i].Cells[3].Value == DBNull.Value ? "" : dgvEmployee.Rows[i].Cells[3].Value.ToString());
sqlCmd.Parameters.AddWithValue("@Age", Convert.ToInt32(dgvEmployee.Rows[i].Cells[4].Value == DBNull.Value ? "0" : dgvEmployee.Rows[i].Cells[4].Value.ToString()));
}
else//update
{
SqlStr = "UPDATE Employee SET Name = @Name,PositionID = @PositionID,Office = @Office,Age = @Age WHERE EmployeeID = @EmployeeID";
sqlCmd = new SqlCommand(SqlStr, sqlCon);
sqlCmd.Parameters.AddWithValue("@EmployeeID", Convert.ToInt32(dgvEmployee.Rows[i].Cells[0].Value));
sqlCmd.Parameters.AddWithValue("@Name", dgvEmployee.Rows[i].Cells[1].Value == DBNull.Value ? "" : dgvEmployee.Rows[i].Cells[1].Value.ToString());
sqlCmd.Parameters.AddWithValue("@PositionID", Convert.ToInt32(dgvEmployee.Rows[i].Cells[2].Value == DBNull.Value ? "0" : dgvEmployee.Rows[i].Cells[2].Value.ToString()));
sqlCmd.Parameters.AddWithValue("@Office", dgvEmployee.Rows[i].Cells[3].Value == DBNull.Value ? "" : dgvEmployee.Rows[i].Cells[3].Value.ToString());
sqlCmd.Parameters.AddWithValue("@Age", Convert.ToInt32(dgvEmployee.Rows[i].Cells[4].Value == DBNull.Value ? "0" : dgvEmployee.Rows[i].Cells[4].Value.ToString()));
}
sqlCon.Open();
sqlCmd.ExecuteNonQuery();
sqlCon.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
PopulateDataGridView();
MessageBox.Show("Win............");
}
تفضل تذكر ما قلته لك كود الفور على الجدول يسبب بطء و على الشبكة سيسبب مشاكل .
ثانيا لدي استفسار
نظرا لكلامك
عندي فورم ادخل بيانات الموظفين
بعض التكست بوكس به لاسم وبيانات الاساسيه لكل موظف
عدد 6 داتا فيو كل داتا فيو متعلقه بجدول
عند تضتفه موظف جديد بيتم ادخال بياناته الاساسيه ثم بعد ذلك بيتم اختير بعض البنود له من كل داتا فيو ثم حفظ الموظف بحيث عند الحفظ يتم حفظ بينته الاساسيه المدخله وايضا يتم حفظ البنود التى تم اختيارها له من الداتا فيو
اذا وضعت حدث الحفظ ال حضرتك مشكورا عملته فى حدث dgvEmployee_CellValueChanged
هناك هتقبلنى مشكله وهي
فرضا ان المستخدم ادخل بيانات الموظف وتم ختيار بعض البنود له من الدات فيو اذا كان الحفظ فى حدث dgvEmployee_CellValueChanged
سيتم حفظ البنود قبل حفظ البيانات الاساسيه للموظف وهنا ممكن يحصل مشكله لانه تم اضافه بنود لموظف ليس له بيانت سابقا
فهل هناك فكره لديك افضل من ذلك
هذه صوره توضح لفورم الرئيسي الذي سيتم العمل عليه هتلاحظ انه يوجد tabPage فى كل tabPage بها دااتا فيو بيتم اختيار بعض البنود على حسب كل موظف
ودا سبب اننى لاارغب وض كود الحفظ فى حدذ الداتاا فيو حيث من الممكن اضافه بنود لموظف غير موجود اصلا وممكن تسبب اخطاء
فهل هناك غكره او اقتراح لديك يناسب ذلك
؟؟
