Ok, ik wil dynamisch een DataGrid laten genereren. Dit gaat prima met een Custom Web Control. Nu kun je dmv een buttoncolumn een knopje aan elke regel toevoegen die ervoor zorgt dat je een regel kan selecteren. Ook goed.
Maar nu wil ik ervoor zorgen dat als met ergens op de regel klinkt ook dat event (ItemCommand) af gaat.
In HTML bedoel ik dus dit:
De bedoeling is dat na de postback een tweede datagrid zijn gegevens verzamelt op basis van de selectie van het andere grid. Zo kun je in Grid1 zien welke organisaties er zijn en in het andere grid de medewerkers van de organisatie.
De postback lukt, maar waar kan ik nu opvangen op welk Item is geklikt?
Selectiescherm.aspx.cs
WXDataGrid.cs:
Hoe kan ik het click-event van het item opvangen?
Maar nu wil ik ervoor zorgen dat als met ergens op de regel klinkt ook dat event (ItemCommand) af gaat.
In HTML bedoel ik dus dit:
HTML:
1
| <tr onclick="__doPostBack('bla','diebla');"><td>Data1</td><td>Data2</td></tr> |
De bedoeling is dat na de postback een tweede datagrid zijn gegevens verzamelt op basis van de selectie van het andere grid. Zo kun je in Grid1 zien welke organisaties er zijn en in het andere grid de medewerkers van de organisatie.
De postback lukt, maar waar kan ik nu opvangen op welk Item is geklikt?
Selectiescherm.aspx.cs
C:
1
2
3
4
5
6
7
8
9
| public class SelectieScherm : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { System.Web.UI.HtmlControls.HtmlForm hf = new HtmlForm(); hf.Controls.Add(new WXDataGrid()); Page.Controls.Add(hf); } } |
WXDataGrid.cs:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| [assembly:TagPrefix("WX","WXDataGrid")] namespace WX.Web.UI.WebElements { [DefaultProperty("Text"), ToolboxData("<{0}:WXDataGrid runat=server></{0}:WXDataGrid>")] public class WXDataGrid : System.Web.UI.WebControls.DataGrid, INamingContainer, IPostBackEventHandler { public WXDataGrid() {} /// <summary> /// Zet de instellingen voor het DataGrid goed /// </summary> protected void DGSettings () { this.AllowPaging = true; this.AutoGenerateColumns = true; this.ShowFooter = true; ButtonColumn bc = new ButtonColumn(); bc.CommandName = "Select"; bc.ButtonType = ButtonColumnType.LinkButton; bc.Text = "Selecteer"; this.Columns.AddAt(0,bc); } private DataSet CreateDGView() { SqlDataAdapter da = new SqlDataAdapter( "SELECT ORGA AS ID, LEFT(NAAM, 40) AS Organisatie, GEMDB AS Plaats" + " FROM ORGA", ConfigurationSettings.AppSettings.GetValues("connectionstring")[0]); DataSet ds = new DataSet(); da.Fill(ds); return ds; } protected override void OnInit(EventArgs e) { this.EnableViewState = true; this.CurrentPageIndex = 1; this.PageSize = 10; this.DGSettings(); this.DataSource = this.CreateDGView(); this.DataBind(); this.ItemCommand += new DataGridCommandEventHandler(SelecteerItem); } protected override void Render(HtmlTextWriter writer) { this.DGSettings(); this.PageSize = 10; base.Render(writer); } protected override void OnPageIndexChanged(DataGridPageChangedEventArgs e) { this.CurrentPageIndex = e.NewPageIndex; this.SelectedIndex = -1; this.DataSource = CreateDGView(); this.DataBind(); } #region IPostBackEventHandler Members public void RaisePostBackEvent(string eventArgument) { } #endregion private void SelecteerItem(object source, DataGridCommandEventArgs e) { this.SelectedIndex = e.Item.ItemIndex; } protected override void OnItemCreated(DataGridItemEventArgs e) { e.Item.Attributes.Add("onclick", "javascript:" + Page.GetPostBackEventReference(e.Item, e.Item.ItemIndex.ToString())); e.Item.Style.Add("cursor", "hand"); } } } |
Hoe kan ik het click-event van het item opvangen?
[ Voor 5% gewijzigd door ronald79 op 13-10-2003 16:03 ]
In science one tries to tell people, in such a way as to be understood by everyone, something that no one ever knew before. But in poetry, it's the exact opposite.