Avatar billede mosquito Nybegynder
17. marts 2006 - 11:49 Der er 1 løsning

kan ikke sætte ændring på selectedItem ved postback

Jeg har en webform 'register.ascx' med en liste af kunder (ddlCustomers). Hvis jeg vil tilføje en kunde til listen, åbner jeg en anden webform 'searchCustomer.aspx'. Heri finder jeg kunden og vil tilføje den til min eksisterende liste på 'register.ascx'. Jeg får fint kunden tilføjet listen som det første element, men får ikke lov til at sætte selectedIndex=0, eller rettere, den ignorerer mit valg.

Jeg er nu i tvivl om ændringen ske serverside eller clientside ? Men mener det skal ske serverside. Men hvordan ændrer jeg viewstate på ddlCustomers, så jeg får vist den den tilføjede kunde straks jeg kommer tilbage til 'register.ascx'?

Samtidig har jeg tænkt at jeg måske i mit javascript som kaldes fra 'searchCustomer.aspx', skal sætte selected index, men får en error: 'document.forms.0.ddlCustomers.0' er null eller ikke et objekt.

EnableViewState på 'ddlCustomers' er true.
AutoPostBack på 'ddlCustomers' er true.


*********************
// register.ascx - snippet
*********************
protected void Page_Load(object sender, EventArgs e)
        {
                if (!Page.IsPostBack)
                {
                        Session.Add("recent customers", null);
                        Session.Add("found customer", null);
                        FillRecentCustomers();
                }

                // add customer if any from search.aspx
                if (Session["found customer"] != null)
                {
                        AddFoundCustomer((DataRow) Session["found customer"]);
                        FillRecentCustomers();
                        ddlCustomers.SelectedIndex = 0;
                }
        }
private void FillRecentCustomers()
        {
                DataTable recentCustomers;

                if (Session["recent customers"] == null)
                {
                        recentCustomers = db.GetRecentCustomers(userID);
                        Session["recent customers"] = recentCustomers;

                        DataColumn[] keys = new DataColumn[1];
                        keys[0] = recentCustomers.Columns["ID"];
                        recentCustomers.PrimaryKey = keys;
                }
                recentCustomers = (DataTable) Session["recent customers"];

                ddlCustomers.Items.Clear();
                ddlCustomers.DataSource = recentCustomers;
                ddlCustomers.DataTextField = "customer";
                ddlCustomers.DataValueField = "ID";
                ddlCustomers.ClearSelection();
                ddlCustomers.DataBind();
        }

private void AddFoundCustomer(DataRow customer)
        {
                DataTable recentCustomers = (DataTable) Session["recent customers"];
                if (!recentCustomers.Rows.Contains(customer[0]))
                        recentCustomers.Rows.InsertAt(customer, 0);
        }


***************************************
// searchCustomer.aspx - snippet
***************************************
Page.ClientScript.RegisterStartupScript(GetType(), "found customer", "window.opener.UpdateForm();window.close();", true);


// script
unction SetSelection()
{
    var val = document.forms[0].ddlCustomers[0].value;
    alert(val);
}

function UpdateForm()
{
    SetSelection();
    document.forms[0].submit();
}


Det var en lang smørre, men jeg håber der er en eller flere der kan overskue det og give mig et puf i den rigtige retning.
Avatar billede mosquito Nybegynder
20. marts 2006 - 10:45 #1
da der sker en ændring i rækkefølgen, på min ddlCustomers, ved indsættelse af den nye kunde på plads 0, sker der en SelectedIndexChanged event. Der er her mit valgte index bliver overskrevet. Dette vil ikke ske, hvis jeg brugte Add Metoden.

I slutningen af metoden kan jeg derfor sætte index uden at den overskrives.
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