Avatar billede jriff Nybegynder
29. januar 2006 - 12:16 Der er 5 kommentarer

GridView og key

Hej Alle!

Jeg har lavet et GridView med GridView1.DataKeyNames = new String[] { "koeberID" };

Jeg har en delete-knap i Grid'et, men når jeg trykker på den så retunerer GridView1.SelectedDataKey.Value null. Det kan jeg på sin vis godt forstå da man jo ikke har selected nogen række, men hvordan får jeg så min datakey hentet frem? Jeg kunne godt finde ud af det i .net 1.1 :-)

En lille ekstra ting: Hvorfor skal DataKeyNames skrives som et array? Det virker da helt i skoven.

- Jacob
Avatar billede jriff Nybegynder
29. januar 2006 - 12:44 #1
Ok.. man kan gøre således:

int index = Convert.ToInt32(e.CommandArgument);
int id = (int)this.GridView1.DataKeys[index].Value;

Men det er da vildt besværligt - kan det virkelig være rigtigt at man skal gøre sådan?
Avatar billede dr_chaos Nybegynder
01. februar 2006 - 18:51 #2
der kan være mange DataKeyNames derfor bruges string array.
Man bruger det også i forbindelse med skjulte kollonner.

du kan få den med
int index = Convert.ToInt32(e.CommandArgument);
Avatar billede dr_chaos Nybegynder
01. februar 2006 - 18:52 #3
Bruger du rowcommand eller hvordan ser din delete funktion ud ?
Avatar billede jriff Nybegynder
04. februar 2006 - 10:54 #4
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            int index = Convert.ToInt32(e.CommandArgument);
            int id = (int)GridView1.DataKeys[index].Value;
            Response.Redirect("wfmManipulateDummy.aspx?Dummyid=" + id);
        }

        if (e.CommandName == "Delete")
        {
            int index = Convert.ToInt32(e.CommandArgument);
            int id = (int)GridView1.DataKeys[index].Value;
            OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["SEKT"].ConnectionString);
            OleDbCommand cmd = new OleDbCommand("delete * from dummy where dummyid=" + id, conn);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
            doGrid();
        }
}


Hvordan kan jeg bruge mere end ét datakeyname? DataKeys[index] retunerer vel kun én værdi?
Avatar billede dr_chaos Nybegynder
04. februar 2006 - 12:03 #5
du kan bruge
int id = (int)GridView1.DataKeys[index].Values["id"]
i Values kan du bruge enten index eller string med datakeyname.


For en delete kan du også bruge

  protected void GridView1__Delete(object sender, GridViewDeleteEventArgs e)
    {
        int index = e.RowIndex
}
Der skal du bare vælge show delete button på gridviewet i et commandfield.
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