2014-05-27 6 views
0

Я просто хочу определить этот вид сетки в режиме редактирования строк, и я просто хочу привязать выпадающий список в данный момент. я нашел много статьи и я сделать этот код:Как определить вид сетки в режиме редактирования при привязке данных строки

protected void GV_ViewCustomers_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit) 
     { 
      using (DataClassesDataContext db = new DataClassesDataContext()) 
      { 
       DropDownList dl = (DropDownList)e.Row.FindControl("DDL_Types1"); 
       dl.DataSource = db.PartyTypes.Select(t => t).ToList(); 
       dl.DataBind(); 
       dl.SelectedValue = DataBinder.Eval(e.Row.DataItem, "type_id").ToString(); 
       DropDownList dl1 = (DropDownList)e.Row.FindControl("DDL_CountryNames1"); 
       dl1.DataSource = db.Countries.Select(c => c).ToList(); 
       if (!string.IsNullOrEmpty(DataBinder.Eval(e.Row.DataItem, "country_id").ToString())) 
       { 
        dl1.SelectedValue = DataBinder.Eval(e.Row.DataItem, "country_id").ToString(); 
        DropDownList dl2 = (DropDownList)e.Row.FindControl("DDL_StateNames1"); 
        dl2.DataSource = db.States.Where(s => s.country_id.Equals(int.Parse(DataBinder.Eval(e.Row.DataItem, "country_id").ToString()))).Select(s => s).ToList(); 
        dl2.DataBind(); 
       } 
       DataRowView rowView1 = (DataRowView)e.Row.DataItem; 
       if (rowView1["UserOFC"] != null) 
       { 
        (e.Row.FindControl("chk_UserOFC1") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserOFC").ToString()); 
       } 
       if (rowView1["UserVAT"] != null) 
       { 
        (e.Row.FindControl("chk_UserVAT1") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserVAT").ToString()); 
       } 
       if (rowView1["UserINV"] != null) 
       { 
        (e.Row.FindControl("chk_UserINV1") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserINV").ToString()); 
       } 
       if (rowView1["UserNone"] != null) 
       { 
        (e.Row.FindControl("chk_UserNone1") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserNone").ToString()); 
       } 
      } 
      UpdatePanel10.Update(); 
     } 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      using (DataClassesDataContext db = new DataClassesDataContext()) 
      { 
       DropDownList ddl1 = (DropDownList)e.Row.FindControl("DDL_Types"); 
       ddl1.DataSource = db.PartyTypes.Select(p => p).ToList(); 
       ddl1.DataBind(); 
       DropDownList ddl2 = (DropDownList)e.Row.FindControl("DDL_CountryNames"); 
       ddl2.DataSource = db.Countries.Select(c => c).ToList(); 
       ddl2.DataBind(); 
      } 
     } 
} 

как всегда сноска выпадающий список успешно связывает вверх, но в шаблоне элемента редактирования нет.

пожалуйста, помогите мне ...

protected void GV_ViewCustomers_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     GV_ViewCustomers.EditIndex = e.NewEditIndex; 
     this.FillGrid((String)Session["StartAlpha"] ?? null, (int)Session["GroupByENTYPE"] , (String)Session["ColumnName"] ?? null, (String)Session["SearchText"] ?? null); 
     UpdatePanel10.Update(); 
     MPE.Show(); 
    } 

ответ

2

Не уверен, что ваш вопрос на самом деле, но вы должны проверить RowState=Edit также в сноске.

Таким образом, вместо:

protected void GV_ViewCustomers_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit) 
    { 
     // ... 
    } 
    if (e.Row.RowType == DataControlRowType.Footer) 
    { 
     // ... 
    } 
} 

это:

protected void GV_ViewCustomers_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow 
     && e.Row.RowState == DataControlRowState.Edit) 
    { 
     // ... 
    } 
    else if (e.Row.RowType == DataControlRowType.Footer 
     && e.Row.RowState == DataControlRowState.Edit) 
    { 
     // ... 
    } 
} 
+0

почему я должен проверить на стороне колонтитула я просто только работать с DataControlRowState.Edit. – Shal

+1

@Shal: Я не понимаю, вы используете 'DataControlRowState.Edit' только для обычных строк, но не для строки нижнего колонтитула, что означает, что код всегда выполняется, даже если вы не находитесь в режиме редактирования. –

+0

Я реализую его, но все тот же вопрос ... – Shal