Ik ben bezig met het maken van een datagrid, waar ik een soort van woordenboek in kan zetten. Bij een gegeven "stringId" kan ik dan per taal een vertaling opslaan in de database.
Omdat de talen niet vast staan moet ik de kolommen hiervoor dynamisch aanmaken
Het op het scherm zetten van deze datagrid lukt perfect, echter als ik op een van de knoppen klik, gebeurd er helemaal niets, de event handler wordt nooit bereikt, ook niet als ik een Exception forceer bij de ItemCommand eventhandler.
De (belangrijke) code van de pagina:
De datagrid code van de pagina:
Als ik de opzet van de datagrid code vergelijk met wat ik al eens heb gemaakt in .Net 1.1, dan zie ik eigenlijk geen verschil - maar dit is de eerste keer dat ik kolommen dynamisch aanmaak.
Omdat de talen niet vast staan moet ik de kolommen hiervoor dynamisch aanmaken
Het op het scherm zetten van deze datagrid lukt perfect, echter als ik op een van de knoppen klik, gebeurd er helemaal niets, de event handler wordt nooit bereikt, ook niet als ik een Exception forceer bij de ItemCommand eventhandler.
De (belangrijke) code van de pagina:
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
| protected override void OnInit(EventArgs e) { base.OnInit(e); dtgStringTable.ItemCommand += new DataGridCommandEventHandler(dtgStringTable_ButtonClick); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); //Create datagrid language columns for (int i = 0; i < dictionary.Languages.Length; i++) { string curLang = dictionary.Languages[i].LanguageId.ToUpper(); TemplateColumn dgColumn = new TemplateColumn(); dgColumn.HeaderTemplate = new StringTableTemplate(ListItemType.Header, curLang); dgColumn.FooterTemplate = new StringTableTemplate(ListItemType.Footer, curLang); dgColumn.ItemTemplate = new StringTableTemplate(ListItemType.Item, curLang); dgColumn.EditItemTemplate = new StringTableTemplate(ListItemType.EditItem, curLang); dtgStringTable.Columns.AddAt(i + 1, dgColumn); } FillDataGrid(); } private void FillDataGrid() { DataTable dt = new DataTable(); //Create datatable columns dt.Columns.Add("stringId", typeof(string)); foreach (Language curLang in dictionary.Languages) { dt.Columns.Add("trans" + curLang.LanguageId.ToUpper(), typeof(string)); } //Fill datatable foreach (string[] curLine in dictionary.GetStringTable()) { dt.Rows.Add(curLine); } dtgStringTable.DataSource = dt; dtgStringTable.DataBind(); } private void dtgStringTable_ButtonClick(object sender, DataGridCommandEventArgs e) { throw new Exception("Test:" + e.CommandName); //Event test! switch (e.CommandName.ToLower()) { case "add": { } break; case "edit": { dtgStringTable.EditItemIndex = e.Item.ItemIndex; } break; case "save": { dtgStringTable.EditItemIndex = -1; } break; case "cancel": { dtgStringTable.EditItemIndex = -1; } break; case "delete": { } break; default: throw new Exception(e.CommandName + "-" + e.CommandArgument + "-" + e.CommandSource.ToString()); } } |
De datagrid code van de pagina:
XML:
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
| <asp:DataGrid id="dtgStringTable" runat="server" CssClass="table_layout" GridLines="None" ShowHeader="True" ShowFooter="True" AutoGenerateColumns="False"> <ItemStyle CssClass="table_row_normal"></ItemStyle> <AlternatingItemStyle CssClass="table_row_alternate"></AlternatingItemStyle> <HeaderStyle CssClass="table_header"></HeaderStyle> <FooterStyle CssClass="table_footer"></FooterStyle> <Columns> <asp:TemplateColumn runat="server"> <HeaderTemplate> String ID </HeaderTemplate> <ItemTemplate> <asp:label style="float:left;width: 200px;" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "stringId") %>' /> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn> <ItemTemplate> <asp:ImageButton runat="Server" CssClass="table_imagebutton" ImageUrl="images/edit_edit.png" CommandName="Edit" /> <asp:ImageButton runat="Server" CssClass="table_imagebutton" ImageUrl="images/edit_delete.png" CommandName="Delete" /> </ItemTemplate> <EditItemTemplate> <asp:ImageButton runat="Server" CssClass="table_imagebutton" ImageUrl="images/edit_save.png" CommandName="Save" /> <asp:ImageButton runat="Server" CssClass="table_imagebutton" ImageUrl="images/edit_cancel.png" CommandName="Cancel" /> </EditItemTemplate> <FooterTemplate> <asp:ImageButton runat="Server" CssClass="table_imagebutton" ImageUrl="images/edit_add.png" CommandName="Add"/> </FooterTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> |
Als ik de opzet van de datagrid code vergelijk met wat ik al eens heb gemaakt in .Net 1.1, dan zie ik eigenlijk geen verschil - maar dit is de eerste keer dat ik kolommen dynamisch aanmaak.