Avatar billede agertoft Nybegynder
19. august 2005 - 15:24 Der 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:

<asp:ButtonColumn Text="Select" CommandName="Select" Visible="False">
    <ITEMSTYLE HorizontalAlign="left" width="1px"></ITEMSTYLE>
</asp:ButtonColumn>

Den gør egentlig ikke andet end at gøre det muligt at vælge en hel linje i grid'et - det er ikke en som skal vises.

Det giver det problem, at DataGrid'et ikke opfattes som tomt med denne ButtonColumn i, og dermed vises min EmptyGridText ikke.

Hvordan løser jeg dette problem?
Avatar billede snepnet Nybegynder
19. august 2005 - 21:22 #1
du kan gøre det på flere måder :

- 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.

mvh
Avatar billede agertoft Nybegynder
24. august 2005 - 11:39 #2
Tak for svaret. Jeg vender lige tilbage, når jeg har afprøvet det. Har ikke glemt spørgsmålet ;-)
Avatar billede snepnet Nybegynder
24. august 2005 - 11:44 #3
bare iorden :o)
mvh
Avatar billede agertoft Nybegynder
26. august 2005 - 11:04 #4
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?
Avatar billede agertoft Nybegynder
26. august 2005 - 11:07 #5
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...
Avatar billede agertoft Nybegynder
26. august 2005 - 11:58 #6
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?
Avatar billede agertoft Nybegynder
26. august 2005 - 12:58 #7
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 :)
Avatar billede snepnet Nybegynder
26. august 2005 - 18:06 #8
du får et svar her, men også lige et par kommentarer.

en kolonne vil ikke opfattes som et item, men som en Column på et Item.

hvis du vil størst mulig kontrol over de ting du sætter ind i hvert item, kan du med fordel lave det som templates i aspx'en fx.:

<asp:DataGrid ID="grid" runat="server" AutoGenerateColumns="False" OnItemCommand="grid_ItemCommand">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:TextBox ID="txtText" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateColumn>               
        <asp:ButtonColumn ButtonType="PushButton" Text="Save changes" CommandName="save" ></asp:ButtonColumn>
    </Columns>           
</asp:DataGrid>   

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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Sektionschef til Enterprise Arkitektur i Forsvaret på Østerbro

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Kickstart din IT-karriere som IT-supporterelev på Flyvestation Aalborg