2012-03-20 3 views
0

이 기능에 대해 여러 번 작업하지만 전혀 작동하지 않습니다. 코드로 Gridview를 채우고 클릭 할 때 행 세부 정보를 여는 버튼을 추가합니다.gridview에서 버튼을 동적으로 채 웁니다. 이벤트가 발생하지 않습니다.

데이터 테이블을 채우지 만 작동하지는 않지만 버튼을 추가하려고합니다. row_databound 메서드에 단추를 추가하려고하면; 그것은 렌더링하지만 화재 이벤트는 발생하지 않습니다.

다음과 같이 semplify 코드를 사용하십시오. 이 문제를 해결하는 데 도움이되기를 바랍니다.

감사합니다. P

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    string sSearchQuery = "(" + TextBox1.Text + ")"; 
    loadDynamicGrid(sSearchQuery); 
} 

private void loadDynamicGrid(string sSearchQuery) 
    { 
     //search 
     .....  
     var oHitColl = searcher.Search(oParser.Parse(sSearchQuery)); 

     //istance of DataTable 
     gvResult.Columns.Clear(); 
     gvResult.DataSource = null; 

     DataTable dt = new DataTable(); 


     DataColumn dcol = new DataColumn("Id", typeof(System.String)); 
     dt.Columns.Add(dcol); 
     dcol = new DataColumn("Table", typeof(System.String)); 
     dt.Columns.Add(dcol); 
     dcol = new DataColumn("Summary", typeof(System.String)); 
     dt.Columns.Add(dcol); 
     dcol = new DataColumn("Link", typeof(System.String)); 
     dt.Columns.Add(dcol); 
     dcol = new DataColumn("Button", typeof(Button)); 
     dt.Columns.Add(dcol); 


     //Populate la datatable 
     for (int i = 0; i < oHitColl.Length(); i++) 
     { 
      Document oDoc = oHitColl.Doc(i); 

      DataRow drow = dt.NewRow(); 
      drow["Table"] = oDoc.Get("Table"); 
      drow["Summary"] = oDoc.Get("Summary"); 
      drow["Id"] = oDoc.Get("Id"); 
      string url = ....".aspx"; 
      drow["Link"] = linkText; 
      //Button btn = CreateButton("dinamicBtn" + i.ToString(), "dinamicBtn" + i.ToString()); 
      //drow["Button"] = btn; 
      dt.Rows.Add(drow); 
     } 

     // add columus in GridView 
     foreach (DataColumn col in dt.Columns) 
     { 
      //Dichiarare i campi bindati e allocare la memoria che serve 
      BoundField bfield = new BoundField(); 
      bfield.DataField = col.ColumnName; 
      bfield.HeaderText = col.ColumnName; 
      gvResult.Columns.Add(bfield); 

     } 

     gvResult.DataSource = dt; 
     gvResult.DataBind(); 
     searcher.Close(); 
    } 

protected void gvResult_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Button btn = new Button(); 
      btn = CreateButton("btnOpen_"+ e.Row.RowIndex.ToString(), "Open"); 
      btn.DataBinding +=new EventHandler(btn_DataBinding); 
      e.Row.Cells[e.Row.Cells.Count - 1].Controls.Add(btn); 

     } 
    } 

private Button CreateButton(string id, string name) 
{  
    Button b = new Button(); 
    b.Text = name; 
    b.ID = id; 
    b.Click += new EventHandler(Dynamic_Method); 
    b.DataBinding += new EventHandler(btn_DataBinding); 
    return b; 
} 

private void btn_DataBinding(object sender, EventArgs e) 
    { 
     object bound_value_obj = null; 
     Control ctrl = (Control)sender; 
     IDataItemContainer data_item_container = (IDataItemContainer)ctrl.NamingContainer; 
     bound_value_obj = DataBinder.Eval(data_item_container.DataItem,"gvResult.Rows.Count.ToString()"); 
    } 

protected void Dynamic_Method(object sender, EventArgs e) 
{ 
    Response.Write("You have clicked at: "+DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt")); 
} 

답변

0
당신이 이벤트는 그 외에도 등 모든 포스트 백에 중독 될 필요가 동적으로 만들 때마다 다시 게시에 다시 추가 할 필요가 모든 제어, 당신은 OnInit 방법에서이 작업을 수행해야

.

+0

답장을 보내 주셔서 감사합니다. 당신은보기가 있는가? onInit metho를 설정했습니다. – user1281684

관련 문제