[asp.net] ListBox SelectedItem probleem

Pagina: 1
Acties:

  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
Ik heb de volgende situatie waar ik niet uit kom.

Ik heb 2 ListBoxen en een knop. Ik selecteer een waarde uit de eerste listbox en die moet vervolgens naar de 2e listbox gekopieerd worden. Dit gebeurt op het moment dat er op de knop gedrukt wordt.

Declaratie:
code:
1
2
3
4
5
6
public class edit : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.ListBox selectedContacts;
        protected System.Web.UI.WebControls.ListBox availableContacts;
        protected System.Web.UI.WebControls.Button addContact;
    }


In de Page_Load worden ze gevuld (niet postback).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
selectedContactsList = Campaign.GetSelectedContacts(Request["oId"]);
                Cache["selected"] = selectedContactsList;
                selectedContacts.DataSource = selectedContactsList;
                selectedContacts.DataTextField = "FullName";
                selectedContacts.DataValueField = "ContactId";
                selectedContacts.DataBind();

                availableContactsList = Campaign.GetAvailableContacts(selectedContactsList);
                Cache["available"] = availableContactsList;
                availableContacts.DataSource = availableContactsList;
                availableContacts.DataTextField = "FullName";
                availableContacts.DataValueField = "ContactId";
                availableContacts.DataBind();


Het event van de button:
code:
1
2
3
4
5
6
7
8
9
10
private void addContact_Click(object sender, System.EventArgs e)
        {
            DataSet temp = (DataSet)Cache["selected"];
            DataRow row = temp.Tables[0].NewRow();
            row["ContactId"] = availableContacts.SelectedItem.Value;;
            row["FullName"] = availableContacts.SelectedItem.Text;
            temp.Tables[0].Rows.Add(row);
            Cache["selected"] = temp;
            availableContacts.Items.Remove(availableContacts.SelectedItem);
        }


Het gaat fout bij de regel:
code:
1
row["ContactId"] = availableContacts.SelectedItem.Value;

En dan het laatste deel. Hij kan niets met het availableContacts object doen.

Error:
Object reference not set to an instance of an object.

Viewstate staat aan van de objecten en volgens mijn gevoel zou dit moeten werken. Maar waarom werkt het niet.....

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Is er wel een selecteditem ?
Ben je zeker dat je die listboxen niet heropvuld bij een page_load?
Waarom maak je gebruik van een temporary datarow ?

https://fgheysels.github.io/


  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
whoami schreef op 30 december 2003 @ 13:54:
Is er wel een selecteditem ?
Ben je zeker dat je die listboxen niet heropvuld bij een page_load?
Waarom maak je gebruik van een temporary datarow ?
1: Het object ListBox heeft een attribuut SelectedItem.
2: De listboxen zijn gekoppeld aan een dataset, welke alleen gevuld wordt wanneer (!Page.IsPostback) true is. De databind vind wel altijd plaats (datasets worden in de cache bewaard).
3: De temp datarow wordt aan het einde in een DataSet weggeschreven.

edit: Over punt 1, ik weet dus niet zeker of het een SelectedItem heeft, ik zou echter niet weten waarom niet. Ik selecteer er 1 in de pagina.

[ Voor 12% gewijzigd door hiostu op 30-12-2003 14:01 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
hiostu schreef op 30 december 2003 @ 13:58:
[...]


1: Het object ListBox heeft een attribuut SelectedItem.
Ik bedoel: is er wel een item geselecteerd, maw is SelectedItem != null.
2: De listboxen zijn gekoppeld aan een dataset, welke alleen gevuld wordt wanneer (!Page.IsPostback) true is. De databind vind wel altijd plaats (datasets worden in de cache bewaard).
Je hoeft je listboxen niet te rebinden bij iedere postback.
3: De temp datarow wordt aan het einde in een DataSet weggeschreven.
Je kan ook ListBox.Items.Add (new ListItem ( ..... )) doen.
edit: Over punt 1, ik weet dus niet zeker of het een SelectedItem heeft, ik zou echter niet weten waarom niet. Ik selecteer er 1 in de pagina.
Omdat je je listboxen rebinded in je page_load, en de state van de listbox dus verloren is gegaan.

https://fgheysels.github.io/


  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
whoami schreef op 30 december 2003 @ 14:05:

Omdat je je listboxen rebinded in je page_load, en de state van de listbox dus verloren is gegaan.
Als ik mijn listboxen niet rebind in mijn page_load dan krijg ik nog steeds dezelfde error.

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Heb je al eens een breakpoint geplaatst op het stuk code dat gaat zorgen voor het verplaatsen van het listitem, en heb je al eens gekeken welk object er null is (en die dus voor die exceptie zorgt)?

Ik heb hier net ff een klein testje gedaan:
page_load
code:
1
2
3
4
5
6
7
if( !this.IsPostback )
{
     ListBox1.DataSource = dsData;
     ListBox1.DataTextField = "naam";
     ListBox1.DataValueField = "id";
     ListBox1.DataBind();
}


ButtonClick
code:
1
2
3
4
5
6
7
8
if( ListBox1.SelectedItem != null )
{
      ListBox2.Items.Add( new ListItem(ListBox1.SelectedItem.Text, 
                                       ListBox1.SelectedItem.Value));
      ListBox1.Items.Remove(ListBox1.SelectedItem);
      ListBox1.DataBind();
      ListBox2.DataBind();
}

[ Voor 3% gewijzigd door whoami op 30-12-2003 14:24 ]

https://fgheysels.github.io/


  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
Het SelectedItem is dus null, maar hoe kan dat.... Ik doe geen databind meer in de page_load.

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
hiostu schreef op 30 december 2003 @ 14:29:
Het SelectedItem is dus null, maar hoe kan dat.... Ik doe geen databind meer in de page_load.
Doe je nog ergens anders een databind? (Tussen de Page_Load en de button_Click) ?

https://fgheysels.github.io/


  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
whoami schreef op 30 december 2003 @ 14:31:
[...]


Doe je nog ergens anders een databind? (Tussen de Page_Load en de button_Click) ?
nee

  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
Ok nu wordt het helemaal vaag.

Ik heb een simpel test programma gemaakt, op mijn lokale pc werkt het perfect. Hij krijgt ook een selecteditem terug.

Plaats ik het programma echter op de server dan werkt het niet meer en krijg ik dezelfde error. Hoe kan dit.....

Op de server draait al een .net applicatie van Microsoft (MS CRM 1.2). Hier moeten deze bestanden bij geplaatst worden. Kan er ergens in de web.config of application.config een instelling staan waardoor dit niet meer correct werkt? :?


edit: ok in de web.config stond dat viewstate disabled was...

[ Voor 7% gewijzigd door hiostu op 30-12-2003 15:55 ]

Pagina: 1