как определить представление сетки в режиме редактирования при привязке данных строки

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

 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();
    }

person Shal    schedule 27.05.2014    source источник


Ответы (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)
    {
        // ...
    }
}
person Tim Schmelter    schedule 27.05.2014
comment
почему я должен проверять нижний колонтитул, я просто работаю только с DataControlRowState.Edit. - person Shal; 27.05.2014
comment
@Shal: я не понимаю, вы используете DataControlRowState.Edit только для обычных строк, но не для строки нижнего колонтитула, что означает, что код всегда выполняется, даже если вы не находитесь в режиме редактирования. - person Tim Schmelter; 27.05.2014
comment
хорошо, я пропустил одну строку, просто посмотрите на мой код, я пропустил одну строку dl1.databind(), чтобы она не связывалась. любым способом спасибо - person Shal; 27.05.2014
comment
это не будет работать для строк с нечетным индексом строки. Например, попробуйте отредактировать 2-ю строку в представлении сетки, логика if вернет false - person Rabin; 02.06.2016

if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState ==
(DataControlRowState.Edit | DataControlRowState.Alternate))
{
  // write your statement that you want to fire in Edit mode
}

http://www.dotnetfunda.com/codes/show/123/how-to-check-for-edit-mode-of-the-gridview-row-inrespective-of-it-is-n

person Salman AL-Shehri    schedule 09.04.2017