2012-03-20 43 views
0

我在这个函数上工作了几次,但根本不工作。 我通过代码填充gridview,并添加一个按钮,打开单击行上的一个细节。在gridview中添加按钮动态填充:event click not fire

我尝试添加按钮时填充数据表但不工作。 我尝试在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方法 – user1281684 2012-03-21 09:42:27