2014-01-06 1 views
1

Мой код:Gridview Rowcommand срабатывает только один раз - Где ошибка?

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     BindDetails();   
} 

public void BindDetails() 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add(new DataColumn("Name", typeof(string))); 
    dt.Columns.Add(new DataColumn("Designation", typeof(string))); 
    dt.Columns.Add(new DataColumn("Address", typeof(string))); 

    for (int i = 0; i < 10; i++) 
    { 
     DataRow dr = dt.NewRow(); 
     if (i % 2 == 0) 
     { 
      dr["Name"] = "Ram"; 
      dr["Designation"] = "Manager"; 
      dr["Address"] = "Nerul"; 
     } 
     else 
     { 
      dr["Name"] = "Shyam"; 
      dr["Designation"] = "CEO"; 
      dr["Address"] = "Vashi"; 
     } 
     dt.Rows.Add(dr); 
    } 
    grdDetails.DataSource = dt; 
    grdDetails.DataBind(); 
} 

protected void grdDetails_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Button btnEdit = (Button)e.Row.FindControl("btnEdit"); 
     //btnEdit.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference((Control)sender, "value$" + e.Row.RowIndex.ToString())); 
     e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference((Control)sender, "value$" + e.Row.RowIndex.ToString())); 
    } 
} 

protected void grdDetails_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "value") 
    { 
     txtName.Text = grdDetails.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text; 
     txtDesignation.Text = grdDetails.Rows[Convert.ToInt32(e.CommandArgument)].Cells[1].Text; 
     txtAddress.Text = grdDetails.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Text; 
    } 
} 

любезно предоставить решение.

ответ

1

Если я правильно помню, AttributeCollection не сохраняется в ViewState. Затем вам нужно зарегистрировать событие click при каждой обратной передаче не только для привязки данных. Поэтому попробуйте использовать RowCreated вместо RowDataBound.

protected void grdDetails_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Button btnEdit = (Button)e.Row.FindControl("btnEdit"); 
     //btnEdit.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference((Control)sender, "value$" + e.Row.RowIndex.ToString())); 
     e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference((Control)sender, "value$" + e.Row.RowIndex.ToString())); 
    } 
} 
+0

Спасибо, сэр, это работает. Но когда я нажимаю на кнопку i.e; внутри gridview та же логика используется для работы, как указано выше. Но я не могу найти имя команды для нее. Я хочу получить доступ к commandname, не задавая свойства кнопки управления в поле шаблона gridview. – user3165268

Смежные вопросы