Avatar billede keenkbh Nybegynder
10. januar 2007 - 14:09 Der er 8 kommentarer og
1 løsning

DataGrid virker ikke!

Hej alle sammen.

Jeg har et problem med mit datagrid. Jeg kan simpelthen ikke få den til at give noget output, når jeg trykker på en knap. Jeg syne jeg har prøvet alt, så nu må jeg hellere høre herinde, om der er nogle der kan hjælpe.

Mit datagrid ser således ud:
<asp:DataGrid ID="dgPriser" runat="server" AutoGenerateColumns="false">
                    <Columns>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Producent <asp:ImageButton ID="vareProd" runat="server" CommandName="prod" OnClick="sorter_Click" /></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Producent") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Vare ID <asp:ImageButton ID="vareId" runat="server" CommandName="vareId" OnClick="sorter_Click" /></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "VareID") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Navn <asp:ImageButton ID="vareNavn" runat="server" CommandName="navn" OnClick="sorter_Click" /></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Navn") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Beskrivelse <asp:ImageButton ID="vareBeskrivelse" runat="server" CommandName="beskrivelse" OnClick="sorter_Click" /></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Beskrivelse") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Detaljer</HeaderTemplate>
                            <ItemTemplate><asp:ImageButton ID="detaljer" runat="server" ImageUrl="img/ikoner22/Info/info_B2.jpg" /></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Pris <asp:ImageButton ID="varePris" runat="server" CommandName="pris" OnClick="sorter_Click" /></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Pris") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Antal</HeaderTemplate>
                            <ItemTemplate><asp:TextBox ID="antalVarer" runat="server" Text="1" /></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <ItemTemplate><asp:ImageButton ID="kurv" runat="server" ImageUrl="img/ikoner/Kurv/kurv_i_1.jpg" /></ItemTemplate>
                        </asp:TemplateColumn>
                    </Columns>
                    </asp:DataGrid>

jeg har en lille smule codebehind, resten slettede jeg i arrigskab. ups. :)

i Page_Load:
if (!Page.IsPostBack)
        {
            bindData();
        }

protected void bindData()
    {
        SqlDataAdapter pris = new SqlDataAdapter("SELECT * FROM Varer WHERE Kategori=" + Request.QueryString["kat"].ToString() + " AND Subkategori=" + Request.QueryString["sub"].ToString() + " ORDER BY Producent ASC",con);
        DataSet indhold = new DataSet();
        pris.Fill(indhold);
        dgPriser.DataSource = indhold;
        dgPriser.DataBind();
    }

Det jeg gerne vil gøre er, at når man trykker på knappen med ID="kurv", så skal vareID returneres.

Jeg håber, at der er nogle derude der kan hjælpe mig.
Avatar billede thrytter Nybegynder
10. januar 2007 - 14:33 #1
Du kan (på knappen) sætte CommandName og CommandArgument som så kan fanges i Datagrid'ets ItemCommand handler

Eks
<asp:ImageButton ID="kurv" runat="server" CommandName="kurv" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "VareID")%>' ImageUrl="img/ikoner/Kurv/kurv_i_1.jpg" />

ItemCommand kan se ud som:

Private Sub dgPriser_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgPriser.ItemCommand
  Dim vareID As Integer

  Select Case e.CommandName
    Case "kurv"
      vareID = Convert.ToInt32(e.CommandArgument)
  End Select
End Sub
Avatar billede keenkbh Nybegynder
10. januar 2007 - 15:36 #2
Det mener jeg faktisk, at jeg har prøvet, men kan selvfølgelig prøve igen.

Har du muligvis koden i c#? :)
Avatar billede keenkbh Nybegynder
10. januar 2007 - 16:05 #3
lige meget, fandt en translator på nettet. Vender tilbage, når jeg har testet koden...
Avatar billede keenkbh Nybegynder
10. januar 2007 - 17:46 #4
Det virker ikke...

min button ser således ud nu:
<asp:ImageButton ID="kurv" runat="server" ImageUrl="img/ikoner/Kurv/kurv_i_1.jpg" CommandName="kurv" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "VareID")%>' />

Har tilføjet OnItemCommand="dgPriser_ItemCommand" til <asp:datagrid>

min codebehind metode ser således ud:

private void dgPriser_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
        string vareID;
        switch (e.CommandName) {
            case "kurv":
                msg.Text = e.CommandName.ToString();
                break;
        }
    }

Men det virker altså ikke...
Avatar billede thrytter Nybegynder
10. januar 2007 - 20:00 #5
Har ikke problemer med at få det til at virke, selvom jeg normalt arbejder i VB.

Hvis du bruger OnItemCommand="dgPriser_ItemCommand" må funktionen dgPriser_ItemCommand ikke være Private, men skal være enten Protected eller Public
dvs.

protected void dgPriser_ItemCommand(.....)
eller
public void dgPriser_ItemCommand(.....)

Istedet for OnItemCommand="dgPriser_ItemCommand" i aspx filen kan du tilføje en stump kode til funktionen InitializeComponent i din codebehind fil:

this.dgPriser.ItemCommand += new DataGridCommandEventHandler(dgPriser_ItemCommand);
Avatar billede keenkbh Nybegynder
10. januar 2007 - 22:08 #6
mit grid ser sådan her ud nu:

<asp:DataGrid ID="dgPriser" runat="server" AutoGenerateColumns="false">
                    <Columns>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Producent <a href='<%# "priser.aspx?kat="+Request.QueryString["kat"]+"&sub="+Request.QueryString["sub"] %>'><img src="img/pil.gif" alt="pil" class="pil" /></a></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Producent") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Vare ID <a href='<%# "priser.aspx?kat="+Request.QueryString["kat"]+"&sub="+Request.QueryString["sub"]+"&sort=VareID" %>'><img src="img/pil.gif" alt="pil" class="pil" /></a></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "VareID") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Navn <a href='<%# "priser.aspx?kat="+Request.QueryString["kat"]+"&sub="+Request.QueryString["sub"]+"&sort=Navn" %>'><img src="img/pil.gif" alt="pil" class="pil" /></a></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Navn") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Beskrivelse <a href='<%# "priser.aspx?kat="+Request.QueryString["kat"]+"&sub="+Request.QueryString["sub"]+"&sort=Beskrivelse" %>'><img src="img/pil.gif" alt="pil" class="pil" /></a></HeaderTemplate>
                            <ItemTemplate>
                                <a href='<%# "detaljer.aspx?id=" + DataBinder.Eval(Container.DataItem,"VareID") %>'><%# DataBinder.Eval(Container.DataItem, "Beskrivelse") %></a>
                            </ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Detaljer</HeaderTemplate>
                            <ItemTemplate><asp:ImageButton ID="detaljer" runat="server" ImageUrl="img/ikoner22/Info/info_B2.jpg" /></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <HeaderTemplate>Pris <a href='<%# "priser.aspx?kat="+Request.QueryString["kat"]+"&sub="+Request.QueryString["sub"]+"&sort=Pris" %>'><img src="img/pil.gif" alt="pil" class="pil" /></a></HeaderTemplate>
                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Pris") %></ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <ItemTemplate>
                                <asp:ImageButton ID="kurv" runat="server" CommandName="kurv" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "VareID")%>' ImageUrl="img/ikoner/Kurv/kurv_i_1.jpg" />
                            </ItemTemplate>
                        </asp:TemplateColumn>
                    </Columns>
                    </asp:DataGrid>

CodeBehind:

private void InitializeComponent()
    {
        this.dgPriser.ItemCommand += new DataGridCommandEventHandler(dgPriser_ItemCommand);
        this.Load += new System.EventHandler(this.Page_Load);
    }

protected void dgPriser_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        string vareID;

        switch (e.CommandName.ToString())
        {
            case "kurv":
                msg.Text = "Hej: " + e.CommandArgument.ToString();
                break;
        }
    }

Jeg kan simpelthen ikke forstå, hvorfor det ikke virker... kan det have noget at gøre med web.config? eller nogle begrænsninger på det webhotel jeg ligger på? For jeg mener jeg har haft lignende funktionalitet før, og der virkede det. Det er virkelig underligt.
Avatar billede keenkbh Nybegynder
11. januar 2007 - 16:36 #7
hej thrytter.

Jeg fandt godt nok selv fajlen, men den metode du foreslog virker, så smid et svar, så får du point.
Avatar billede thrytter Nybegynder
11. januar 2007 - 16:42 #8
godt at det nu virker for dig - var også testet af i c# (og så har jeg også lært noget...)
Avatar billede keenkbh Nybegynder
11. januar 2007 - 16:53 #9
ja det er jo det... :-)

Endnu en gang tak for hjælpen.
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