Avatar billede sjaka Nybegynder
07. oktober 2004 - 16:02 Der er 10 kommentarer og
1 løsning

Hente fra Datagrid

Hej eksperter!

Jeg har et datagrid som indeholder nogle film fra en database. I den første kolonne har jeg titlerne, som er linkbuttons. Nu vil jeg gerne have at når jeg trykker på en bestemt titel skal titlen kopieres over i en listbox. Men hvordan gør jeg det? Den skal jo vide hvilken titel den skal overføre...

Det skal virke ligesom et indkøbssystem hvor man klikker på en vare og den overføres til en indkøbskurv.

Som sædvanlig, gerne med et eksempel :)
Avatar billede snepnet Nybegynder
07. oktober 2004 - 16:07 #1
det nemmeste er sådan set at du sikrer dig at sætte de relevante oplyninger ind på selve din linkbutton.

f.eks.

someLinkButton.CommandName = "DoSomething";
someLinkButton.CommandArgument ="SomeId";

Så kan du i handleren af klikeventet gøre hvad der skal gøre på baggrund af de oplyninger som du kan trække direkte fra selve knappen.

du få lige et lille eksempel om lidt.

mvh
Avatar billede snepnet Nybegynder
07. oktober 2004 - 16:19 #2
Sorry... der var lige en telefon... du får lige en aspx-fil og en code-behind:

// aspx (der har du jo nok noget i forvejen :o)
<%@ Page language="c#" Codebehind="Sjaka.aspx.cs" AutoEventWireup="false" Inherits="EXP2.Sjaka" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Sjaka</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <asp:DataGrid id="DataGrid1" runat="server">
                <Columns>
                    <asp:TemplateColumn HeaderText="SomeLinkButton">
                        <ItemTemplate>
                            <asp:LinkButton id="LinkButton1" runat="server" Text="Klik her" CommandName="DoSomething" CommandArgument='<%# DataBinder.Eval(Container, "DataItem.FldString") %>' OnClick="LinkButton_Click">LinkButton</asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
            </asp:DataGrid>
        </form>
    </body>
</HTML>


// og en code-behind :
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace EXP2
{
    public class Sjaka : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.DataGrid DataGrid1;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
            DataSet ds = <hent noget data :o)>
            DataGrid1.DataSource = ds;
            DataGrid1.DataBind();
        }

        protected void LinkButton_Click(object sender, EventArgs e)
        {
            string command = ((LinkButton)sender).CommandName;
            string argument = ((LinkButton)sender).CommandArgument;
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);
        }
    }
}
Avatar billede snepnet Nybegynder
07. oktober 2004 - 16:23 #3
Og udover det har du til enhver tid mulighed for at hive alt det ud af dit grid som du vil, og du kan meget let bladre det hele igennem, hvis det skulle være nødvendigt :

// for hver række i griddet
foreach(DataGridItem dgi in this.DataGrid1.Items)
{
  // kigger kun på "datarækker"
  if(dgi.ItemType == ListItemType.Item || dgi.ItemType == ListItemType.AlternatingItem)
  {
      // du har så de relevante rækker her du kan kigge i
  }
}

mvh
Avatar billede sjaka Nybegynder
08. oktober 2004 - 09:20 #4
protected void LinkButton_Click(object sender, EventArgs e)
        {
            string command = ((LinkButton)sender).CommandName;
            string argument = ((LinkButton)sender).CommandArgument;
        }


Den der er jeg ikke helt med på... kan du ikke uddybe lidt? Hvordan knytter jeg den til mit datagrid?
Avatar billede sjaka Nybegynder
08. oktober 2004 - 11:19 #5
Jeg har nu prøvet at lave det på denne måde:

private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{ListBox1.Items.Add(DataGrid1.SelectedItem.ToString());}

men det giver følgende fejl:


Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: Line 371:            ListBox1.Items.Add(DataGrid1.SelectedItem.ToString());
Avatar billede snepnet Nybegynder
08. oktober 2004 - 11:50 #6
Sådan lige umiddelbart er det også noget ganske andet du prøver.... har du prøvet at oprette et lille miniprojekt, hvor du bruger mit eksempel direkte ?
mvh
Avatar billede snepnet Nybegynder
08. oktober 2004 - 11:52 #7
Og denne her :
string command = ((LinkButton)sender).CommandName;
gør det, at den typecaster den kontrol der har afstedkommet at eventet blev fyret til en linkbutton - og så kigger den på dennes CommandName.
Er eventet ikke fyret af en LinkButton vil det fejle, men i det eksempel jeg har sendt kan det ikke ske fra andet.
mvh
(du skal bare blive ved med at spørge... jeg skal nok svare, men jeg er på arbejde, så der kan godt være nogle "huller" i svarfrekvensen :o)
Avatar billede snepnet Nybegynder
16. oktober 2004 - 23:48 #8
hej sjaka - hvordan går det her ?
mvh
Avatar billede snepnet Nybegynder
19. oktober 2004 - 18:18 #9
jeg smider lige et svar her, hvis du vil lukke og kunne bruge det :o)
du siger bare til hvis du ikke har fået det til at spille endnu - bare fløjt, og jeg skal være der asap (skal i hvert fald prøver) :o)
mvh
Avatar billede sjaka Nybegynder
27. oktober 2004 - 09:14 #10
Jeg har været ret distræt, så derfor jeg ikke lige accepterede svaret
Avatar billede snepnet Nybegynder
27. oktober 2004 - 09:16 #11
bare iorden :o)
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

Skal lukkes AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Banedanmark

Stamdatakoordinator

Zealand Business College

Faglig teamleder til IT Drift & Support