25. februar 2008 - 00:08Der er
4 kommentarer og 1 løsning
asp:Listbox
Jeg har en listbox i en formview som driller lidt. Hvis der er valgt et enme er der ikke noget galt i at vise resultatet fra databasen, men er der valgt flere elementer får jeg en fejl der siger:
[ArgumentOutOfRangeException: 'Gruppe' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value]
//Henter valget af betalingsmetoder for det enkelte firma foreach (ListItem i in cboxPaymentsMethods.Items) { if (api.GetPaymentMethodsCompany(user_id, ref PaymentMethodsCompany) == FaktureringApi.FStatus.Success) { for (int j = 0; j < PaymentMethodsCompany.Rows.Count; j++ ) { int activatet = Convert.ToInt32(PaymentMethodsCompany.Rows[j]["Aktiveret"].ToString()); int paymentid = Convert.ToInt32(PaymentMethodsCompany.Rows[j]["BetalingsmaadeID"].ToString()); int payment = Convert.ToInt32(PaymentMethods.Rows[0]["BetalingsmaadeID"].ToString());
if (Convert.ToInt32(i.Value.ToString()) == paymentid) { if (activatet == 1) { i.Selected = true; } } } DataTable dtPayment = null; int paymentType = Convert.ToInt32(i.Value.ToString());
if (api.GetPaymentMethod(user_id, paymentType, ref dtPayment) == FaktureringApi.FStatus.Success) { } else { //Opretter den type, som firmaet ikke har som valg i Betalingsmaade tabellen. if (api.SetCompanyPaymentMethod(user_id, paymentType, 0) == FaktureringApi.FStatus.Success) { } } } } } } catch { }
Her gemmer jeg så min betalingsmåder: protected void btnSavePaymentMethods_Click(object sender, EventArgs e) { FaktureringApi api = new FaktureringApi(); int user_id = Convert.ToInt32(Session[FaktureringApi.SessionUserId]); int aktiveret = 0;
clearMessages();
try { foreach (ListItem i in cboxPaymentsMethods.Items) { int paymentID = Convert.ToInt32(i.Value.ToString());
Altså når man har valgt flere ListItems og gemt dem i databasen, så vil jeg gerne kunne hente dem alle igen og vise det i ListBoxen. Men det er der jeg får fejlen, den idet meddelelsen siger af SelectedValue ikke er i listen af Items. Hat prøvet med SelectedItem, men det virker heller ikke
Jeg har lavet følgende, hvor den henter fra en access database, og selecter, dem der er selected i databasen - du må selv udvide med de ListItems du nu engang har - både i databasen og i din aspx fil.
Access databasen ser du som følgende:
Tabelnavn: Test Feltnavn : Navn Datatype : Tekst
Feltnavn : Aktiv Datatype : Ja/Nej
Din aspx fil: (Vær her opmærksom på, jeg har ændret Value navnene....slettet mellemrum)
I din codebehind fil skriver du følgende i PageLoad delen: if (!IsPostBack) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Privat\\Test\\Database\\TestDB.mdb;";
OleDbConnection connection = new OleDbConnection(connectionString); OleDbCommand command = new OleDbCommand(); command.Connection = connection; connection.Open();
DataRow r = null; DataTable AItems = new DataTable();
Det der er galt er at i den gamle asp bliver data gemt i et felt der heder gruppe.
altså hvider er valgt flere i listboksen bliver de gemt som f.eks.
bestyrelsen, IT-området tovholder, PR-gruppen
altså det hele i en linie.
Når jeg så henter data igen vises de i første linie i listboksen som selected.
Det er dette jeg ikke kan få til at virke i asp.net. Jeg tror heller ikke det kan lade sig gøre.
Jeg anbringer istedet for en textbox lige ovenfor listboksen til at vise værdien fra databasefeltet.
mange tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.