19. august 2005 - 15:24Der er
7 kommentarer og 1 løsning
Tomt datagrid
Jeg har et custom lavet DataGrid, hvortil jeg har en property "EmptyGridText", som er teksten, der skal vises, hvis jeg binder DataGrid'et til en tom datakilde.
Det fungerer fint. Mit problem er, at jeg er nødt til at have en ButtonColumn i min grid:
- sæt din ekstra kolonne ind programmatisk, når den skal bruges - overskriv rendermetoden : protected override void Render(HtmlTextWriter writer) { if(NoRows) // NoRows er så bare din egen property, som fortæller om der er noget at vise { writer.Write(EmptyGridText); } }
- lav en customcontrol der enten renderes som et grid eller som noget andet, afhængigt af omstændighederne.
- en ofte benyttet løsning er, både at have et grid og en label på siden, som du bare styrer visibility på, men nu har du så allerede subclasset et grid, og så ville det jo være det bedste at lægge det der.
Hvis jeg sætter den ekstra kolonne ind programmatisk, så vil den ikke blive fanget i min ItemDataBound(). Og dermed vil man ikke kunne vælge linjen i DataGrid'et.
Men bortset fra alt det her, hvorfor opfattes en ButtonColumn så som et item i DataGrid'et?
Grunden til at det irriterer mig er, at jeg har sat en CSS-klasse på mit AlternatingItemStyle, som ændrer baggrunden på linjen. Og den første linje vil da være farvet - uden at have indhold. Hvis jeg ikke havde min AlternatingItemStyle, ville det faktisk være ligemeget. Men det er noget, som jeg skal bruge...
Det er overhovedet ikke AltinatingItemStyle baggrunden, som den linje har. Den giver mig en mørk linje i toppen af DataGrid'et. Er det til at forstå situationen?
Jeg sad og prøvede at løse problemet og ville gerne se denne ButtonColumn i grid'et. Så jeg satte den til Visible="True", og herefter blev den ikke rendered. Jeg aner ikke hvordan det kan være, men det vigtigste er, at det virker nu. Læg et svar - du skal have point for at prøve og lede mig på sporet :)
som du så kan arbejde lidt mere direkte på i koden (istedet for e.Item.Cells[X]..) : protected void grid_ItemCommand(object source, DataGridCommandEventArgs e) { if (e.CommandName == "save") { TextBox tb = e.Item.FindControl("txtText") as TextBox; string textToSave = tb.Text; } }
på hvilket tidspunkt indsætter du kolonnen programmatisk? - og hvad betyder det når du skriver at den ikke bliver fangte i ItemDataBound?
mvh
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.