Adding control to DetailsView dynamically
בהמשך לפוסט
הזה, (שהראה איך להוסיף Validator ל - DetailsView שנוצר בצורה דינמית) אני רוצה להדגים איך להוסיף פקדים בצורה דינמית.
נניח שבזמן Edit אנחנו רוצים להוסיף CheckBox לתא הראשון.
הקוד יראה כך:
protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
DetailsView1.ChangeMode(e.NewMode);
Bind();
CheckBox chk = new CheckBox();
chk.ID = "CheckBox1";
DetailsView1.Rows[0].Cells[1].Controls.Add(chk);
}
אבל כשנלחץ על - Update לא נמצא את ה - CheckBox ב - Collection של ה - Controls. מהסיבה הפשוטה שהיות שזה נוצר בצורה דינמית אנחנו חייבים לייצר אותו כל פעם מחדש (עם אותו ID).
אבל היות שה - ViewState נטען אחרי ה - Init המקום המוקדם שבו נדע מה הסטטוס של ה - DetailsView הוא ב - PreLoad.
protected override void OnPreLoad(EventArgs e)
{
base.OnPreLoad(e);
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
CheckBox chk = new CheckBox();
chk.ID = "CheckBox1";
DetailsView1.Rows[0].Cells[1].Controls.Add(chk);
}
}
ועכשיו באירוע של DetailsView1_ItemUpdating נוכל לשלוף מתוך ה - CheckBox את המידע שלנו.