Avatar billede kkaen Nybegynder
19. april 2012 - 20:39 Der er 8 kommentarer og
1 løsning

Problemer med events i DataList

Jeg har lavet en DataList, hvor der kan oprettes, slettes og opdateres rows. Dataene gemmes i en database.

Det er fint lykkedes mig at indlæse data, og nu er jeg ved at lave en update-funktion. Den virker også - dog først ved 2 tryk på update-knappen.
Jeg har naturligvis forsøgt at følge kommandovejen i debug-mode, og den ser ud til at være nøjagtig den samme, ved begge tryk på update-knappen.

Hvordan kan det være? Kan man evt. se mere ang. kommando-vejen ved en event-liste? Hvis ja, hvordan kan man så se den?
Avatar billede mireigi Novice
19. april 2012 - 22:32 #1
Du skal manuelt opdatere dit dataset. Det kan du gøre på denne måde:
DataList1.DataSource = null;
DataList1.DataSource = MyDataSource1;


Det skulle løse problemet.

Er det en ASP.NET applikation, kan du være nødsaget til manuelt at opdatere din DataList med de nye data:
DataList1.DataBind;


Hvis det ikke virker, må du prøve at give os noget kode at kigge på.
Avatar billede kkaen Nybegynder
20. april 2012 - 08:52 #2
Okay - jeg ser lige, om jeg kan få fundet det korrekte kode til post her.

Ang. population af DataLilsten, så er jeg også lidt i tvivl om forskellen mellem, om det skal foregå i Properties->Data->Databinding eller i Properties->Misc->Load. Hidtil har jeg gjort det i Properties->Misc->Load.
Avatar billede kkaen Nybegynder
20. april 2012 - 11:32 #3
Nu er jeg gået over til et GridView i stedet for. Problemet er, at jeg opretter nogle linkbuttons manuelt, når der skal insættes eller ændres data. Men jeg kan ikke kontrollere klikkene.

Koden er:
protected void Page_Init(object sender, EventArgs e)
{

            LinkButton insertButton = new LinkButton();
            LinkButton cancelButton = new LinkButton();

            if (IsPostBack)
            {
                string text;

                // Get the value of TextBox1 from the page that
                // posted to this page.
                text = ((LinkButton)PreviousPage.FindControl("insertButton")).Text;

                // Check for an empty string.
                if (text != "")
                    System.Diagnostics.Debug.WriteLine("\ntext=" + text + "\n");
            }
}

public void insertButton_OnClick(object sender, CommandEventArgs e)
{
            LinkButton lnk = (LinkButton)sender;
            string s = lnk.CommandArgument;
}

public void cancelButton_OnClick(object sender, CommandEventArgs e)
{
            LinkButton lnk = (LinkButton)sender;
            string s = lnk.CommandArgument;
}

protected void GridView1_Load(object sender, EventArgs e)
{
            System.Diagnostics.Debug.WriteLine("\nGridView1_Load()");

            if (!Page.IsPostBack)
            {

                GridView1.DataSource = null;
                GridView1.DataSource = control.databaseforbindelse(connStr);
                GridView1.DataBind();
            }
        }

//de dynamiske linkbuttons insættes her:
protected void Button1_Click(object sender, EventArgs e)
{
            DataTable dt = control.databaseforbindelse(connStr);

            // Here we'll add a blank row to the returned DataTable
            DataRow dr = dt.NewRow();
            dt.Rows.InsertAt(dr, 0);
            //Creating the first row of GridView to be Editable
            GridView1.EditIndex = 0;
            GridView1.DataSource = dt;
            GridView1.DataBind();

            //Changing the Text for Inserting a New Record
            ((LinkButton)GridView1.Rows[0].Cells[0].Controls[0]).Text = "Insert";
            ((LinkButton)GridView1.Rows[0].Cells[0].Controls[0]).ID = "insertButton";

            ((LinkButton)GridView1.Rows[0].Cells[3].Controls[0]).Text = "Cancel";
            ((LinkButton)GridView1.Rows[0].Cells[0].Controls[0]).ID = "cancelButton";

}

Spørgsmålet er så, hvordan testes der for, om en af disse dynamiske linkbuttons klikkes på, og hvordan sættes der så en handler på klikkes?
Avatar billede kkaen Nybegynder
20. april 2012 - 12:11 #4
HTML'en ser forresten sådan ud:

<asp:GridView ID="GridView1" runat="server" onload="GridView1_Load"
                AutoGenerateColumns="False" onrowupdating="GridView1_RowUpdating">
   
        <Columns>
            <asp:ButtonField ButtonType="Link" Text="Edit" HeaderText="Update" />
            <asp:BoundField DataField="Name" HeaderText="Name" />
            <asp:BoundField DataField="Description" HeaderText="Description" />
            <asp:ButtonField ButtonType="Link" Text="Delete" HeaderText="Delete" />
        </Columns>
       
    </asp:GridView>
Avatar billede mireigi Novice
20. april 2012 - 13:32 #5
LinkButton insertButton = ((LinkButton)GridView1.Rows[0].Cells[0].Controls[0]);
insertButton.OnClick += insertButton_OnClick(insertButton, new CommandEventArgs());


Så er din insert knap koblet op på din insert_Click metode.
Avatar billede kkaen Nybegynder
20. april 2012 - 15:47 #6
Tak for svaret.

I mellemtiden har jeg været helt opslugt af at forsøge mig frem i koden, så jeg har helt glemt at opdatere herinde også.

Men indsæt virker fint nu. Nu er problemet så blot, at den "row", hvor brugeren kunne skrive data til indsættelsen, nu også skal væk. Altså siden med gridviewet skal "gentegnes".

Det er lykkedes mig at fjerne de 2 LinkButtons, og teksten i DataField="Name" (og description) er også væk. Men jeg kan ikke få selve de 2 tekstfelter til at forsvinde - altså jeg kan ikke få hele GridView-row'en væk. Kan det ikke gøres forholdsvist let?
Avatar billede kkaen Nybegynder
22. april 2012 - 19:57 #7
Nu er problematikken overført til:
http://www.eksperten.dk/spm/961546
Avatar billede kkaen Nybegynder
22. april 2012 - 19:58 #8
Vil du lægget et svar, mireigi, så spørgsmålet her kan lukkes?
Avatar billede mireigi Novice
22. april 2012 - 20:22 #9
Bare behold pointene :)
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
Kurser inden for grundlæggende programmering

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