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.
