Avatar billede tchami Nybegynder
20. november 2004 - 18:31 Der er 1 kommentar og
1 løsning

Hente data ud af DataGrid på OnCommand

Hej,

Jeg har et DataGrid med 5 kolonner. Den første kolonne indeholder en LinkButton, de næste 4 data. Ved klik på LinkButton i den første kolonne ønsker jeg at hive data ud for den pågældende række. For at gøre dette har jeg tilføjet en OnCommand event til min LinkButton som kalder metoden Add(). I Add() prøver jeg så at hive data ud, men det har jeg lidt problemer med.

Jeg prøver at lave et DataRowView, og det "lykkedes" som sådan også, men viewet er bare null. Jeg kan godt hente data ud hvis jeg bruger FindControl(), men det er en smule omsonst syntes jeg.

Er der nogle der kan hjælpe?

Koden følger herunder:

<asp:DataGrid ID="dgItems" OnItemDataBound="ItemBound" Runat="server"
    <Columns>
        <asp:TemplateColumn SortExpression="authorname" HeaderStyle-Width="16">               
            <HeaderTemplate>-</HeaderTemplate>
            <ItemTemplate><asp:LinkButton ID="lbButton" Runat="server" OnCommand="Add">+</asp:LinkButton></ItemTemplate>
        </asp:TemplateColumn>               
        <asp:TemplateColumn>               
            <HeaderTemplate>Navn</HeaderTemplate>
            <ItemTemplate><asp:HyperLink ID="hlName" Runat="server" /></ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn>
            <HeaderTemplate>Titel</HeaderTemplate>
            <ItemTemplate><asp:HyperLink ID="hlTitle" Runat="server" /></ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn>
            <HeaderTemplate>Dato</HeaderTemplate>
            <ItemTemplate><%# DataBinder.Eval(Container, "DataItem.date", "{0:d}") %></ItemTemplate>
        </asp:TemplateColumn>               
        <asp:TemplateColumn>
            <HeaderTemplate>Pris</HeaderTemplate>
            <ItemTemplate><%# DataBinder.Eval(Container, "DataItem.price", "{0:c}") %></ItemTemplate>
        </asp:TemplateColumn>
    </Columns>                           
</asp:DataGrid>

protected void ItemBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = (DataRowView)e.Item.DataItem;

        if(drv != null)
        {
            LinkButton lbButton = (LinkButton)e.Item.FindControl("lbButton");
            lbButton.CommandArgument = e.Item.ItemIndex.ToString();
        }
    }
}

protected void Add(object sender, CommandEventArgs e)
{

    HyperLink hlName = (HyperLink)dgItems.Items[Convert.ToInt32(e.CommandArgument)].FindControl("hlName");
    /* Via hlName kan jeg nu få fat i data i kolonne 2 for den pågældende række,
    * men kolonne 4 og 5 indeholder f.eks. ingen kontroller, så data for disse kolonner
    * kan jeg ikke få fat på.
    */
   
   
    DataRowView drv = (DataRowView)dgItems.Items[Convert.ToInt32(e.CommandArgument)].DataItem;
    /*
    * Vha. drv["feltnavn"] burde jeg nu kunne få fat i de forskellige felter, men drv
    * er null, hvorfor det?
    */
   
}
Avatar billede snepnet Nybegynder
20. november 2004 - 23:55 #1
hej tchami :o)

det er den rigtige måde du gør det på (altså via datagriddet objektmodel, og de respektive kontroller).

de kontroller der shipper med den nye betaversion af VS + MxDataGrid og de DataSourceControls der følger med WebMatrix - giver bedre muligheder for automatisering af den slags.

med hensyn til at få fat i teksten i felter hvor der ikke er kontroller - så kan du få den ved :
dgItems.Items[x].Cells[y].Text;

men hvis der ikke er et editerbart felt i kolonnen - er der vel ikke den store grund til at hente værdien, hvis den i forvejen er skrevet ud fra en datakilde (så har du den vel stadig i kilden).

mvh
Avatar billede tchami Nybegynder
21. november 2004 - 01:34 #2
Ok, så ved jeg det til en anden gang. Jeg løste dog problemet ved at hente data ud vha. FindControl().

Mht. datakilden. Jeg har selvfølgelig stadig kilden (en MySQL db), men jeg ville undgå at lave et opslag i databasen.

Men tak for kommentaren :)

Jeg lukker spørgsmålet da jeg har fået løst mit problem.
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