Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- namespace DynamicGridView
- {
- public partial class DynamicGrid : Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- var data = Enumerable.Range(1, 100).Select(x => new { ID = "id" + x, Data = x }).ToList();
- var gw = new GridView { DataKeyNames = new string[] { "ID" }, AutoGenerateColumns = false };
- var dataField = new BoundField { DataField = "Data", HeaderText = "Data" };
- var t = new TemplateField();
- var tf = new MyTemplate(x =>
- {
- ScriptManager.RegisterStartupScript(this, this.GetType(), "key", string.Format("alert('you click to item with ID = {0} and Data = {1}')", x.ID, x.Data), true);
- });
- t.ItemTemplate = tf;
- gw.Columns.Add(dataField);
- gw.Columns.Add(t);
- gw.DataSource = data;
- gw.DataBind();
- this.Form.Controls.Add(gw);
- }
- public class MyTemplate : ITemplate
- {
- private readonly Action<dynamic> action;
- public MyTemplate(Action<dynamic> action)
- {
- this.action = action;
- }
- public void InstantiateIn(Control container)
- {
- var bt = new Button();
- bt.Text = "press me please";
- bt.Click += bt_Click;
- var hfId = new HiddenField();
- hfId.ID = "hfId";
- hfId.DataBinding += hfId_DataBinding;
- var hfData = new HiddenField();
- hfData.ID = "hfData";
- hfData.DataBinding += hfData_DataBinding;
- container.Controls.Add(bt);
- container.Controls.Add(hfId);
- container.Controls.Add(hfData);
- }
- void hfData_DataBinding(object sender, EventArgs e)
- {
- var hf = sender as HiddenField;
- if (hf != null)
- {
- var row = hf.NamingContainer as GridViewRow;
- if (row != null)
- {
- object dataValue = DataBinder.Eval(row.DataItem, "Data");
- hf.Value = dataValue != null ? dataValue.ToString() : string.Empty;
- }
- }
- }
- void hfId_DataBinding(object sender, EventArgs e)
- {
- var hf = sender as HiddenField;
- if (hf != null)
- {
- var row = hf.NamingContainer as GridViewRow;
- if (row != null)
- {
- object dataValue = DataBinder.Eval(row.DataItem, "ID");
- hf.Value = dataValue != null ? dataValue.ToString() : string.Empty;
- }
- }
- }
- void bt_Click(object sender, EventArgs e)
- {
- var bt = sender as Button;
- if (bt != null)
- {
- var row = bt.BindingContainer as GridViewRow;
- if (row != null)
- {
- var id = ((HiddenField)row.FindControl("hfId")).Value;
- var data = ((HiddenField)row.FindControl("hfData")).Value;
- action(new { ID = id, Data = data });
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement