Populating Mulitiselect Listbox

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Chris Leuty

    Populating Mulitiselect Listbox

    I am populating a multiselect Listbox from a dataset, with the content of
    the listbox filled by one table, and the selections determined from another
    table. So far, I have been keeping the dataset a denormalized mirror of the
    database, but I'm not having much luck getting the selection logic down (I
    haven't found a 'hook' where I can access the listbox object as an object to
    set the listitem's selected property before it gets rendered)..

    Before denormalizing the data in hopes of simplifying the binding, I thought
    I would ask if I was missing an obviously simple approach to doing what I am
    after (and leaving the dataset denormalized).

    Thanks


  • Scott G.

    #2
    Re: Populating Mulitiselect Listbox


    I think you should be able to do this with a single table; have you tried something like:

    ListBox lb = new ListBox();
    lb.SelectionMod e = ListSelectionMo de.Multiple;
    lb.DataSource = whatever;
    lb.DataBind();
    // now set from the list box
    foreach (ListItem item in lb.Items)
    {
    if (IsItemSelected (item.Value)) // IsItemSelected is your method
    {
    item.Selected = true;
    }
    }

    // or do it from the data side
    foreach (DataRow row in whatever)
    {
    // blah, whatever you have to determine what's selected.
    if (row["IsSelected "] == "True")
    {
    lb.Items.FindBy Value(row["Value"].ToString()).Se lected = true;
    }
    }

    Scott


    "Chris Leuty" <chris.leuty@no spam.briniker.c om> wrote in message news:OY02of8KEH A.3216@tk2msftn gp13.phx.gbl...
    I am populating a multiselect Listbox from a dataset, with the content of
    the listbox filled by one table, and the selections determined from another
    table. So far, I have been keeping the dataset a denormalized mirror of the
    database, but I'm not having much luck getting the selection logic down (I
    haven't found a 'hook' where I can access the listbox object as an object to
    set the listitem's selected property before it gets rendered)..

    Before denormalizing the data in hopes of simplifying the binding, I thought
    I would ask if I was missing an obviously simple approach to doing what I am
    after (and leaving the dataset denormalized).

    Thanks


    Comment

    • Chris Leuty

      #3
      Re: Populating Mulitiselect Listbox

      The listbox is currently in the aspx, bound like this:
      <TD vAlign="top" align="right">
      <asp:label id="Label13" runat="server" CssClass="form-label">Trades</asp:label>
      </TD>
      <TD>
      <asp:listbox id="lstTrades" runat="server" CssClass="form-text" Width="154px" SelectionMode=" Multiple" DataSource='<%# ContactInfo1 %>' DataMember="Tra des" DataTextField=" TradeName" DataValueField= "TradeID">
      </asp:listbox>
      </TD>
      I have code similar to your examples in the codebehind, but I'm having a hard time finding a place where the Listbox is available as an object (or perhaps my code is fubar). I'm trying to get the listbox reference for the asp:listbox item above by doing the following (in this case, I was doing it during the event that bound the data. e is a DataListCommand EventArgs):
      lstTrades = CType(e.Item.Fi ndControl("lstT rades"), ListBox)
      I think once I get to that point, the actual selection based on the data will be easy. So far, I haven't found a good place to hook this line (I keep getting back Nothing).


      "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:OEfke5FLEH A.3596@tk2msftn gp13.phx.gbl...

      I think you should be able to do this with a single table; have you tried something like:

      ListBox lb = new ListBox();
      lb.SelectionMod e = ListSelectionMo de.Multiple;
      lb.DataSource = whatever;
      lb.DataBind();
      // now set from the list box
      foreach (ListItem item in lb.Items)
      {
      if (IsItemSelected (item.Value)) // IsItemSelected is your method
      {
      item.Selected = true;
      }
      }

      // or do it from the data side
      foreach (DataRow row in whatever)
      {
      // blah, whatever you have to determine what's selected.
      if (row["IsSelected "] == "True")
      {
      lb.Items.FindBy Value(row["Value"].ToString()).Se lected = true;
      }
      }

      Scott


      "Chris Leuty" <chris.leuty@no spam.briniker.c om> wrote in message news:OY02of8KEH A.3216@tk2msftn gp13.phx.gbl...
      I am populating a multiselect Listbox from a dataset, with the content of
      the listbox filled by one table, and the selections determined from another
      table. So far, I have been keeping the dataset a denormalized mirror of the
      database, but I'm not having much luck getting the selection logic down (I
      haven't found a 'hook' where I can access the listbox object as an object to
      set the listitem's selected property before it gets rendered)..

      Before denormalizing the data in hopes of simplifying the binding, I thought
      I would ask if I was missing an obviously simple approach to doing what I am
      after (and leaving the dataset denormalized).

      Thanks


      Comment

      • Scott G.

        #4
        Re: Populating Mulitiselect Listbox


        A good spot is probably Page_Load; if you are using the default code that VS.NET generates then this method should be there.... again, if you are using VS.NET there should already be a member field call "lstTrades" as a protected member of the code behind for the ASPX page.

        If you want the ListBox during a ListBox DataBinding event; then just CType the sender (the first parent) to the event handler; In C# that might look like (for the ListBox DataBindingEven t):

        private void lstTrades_DataB inding(object sender, EventArgs e)
        {
        ListBox lb = (ListBox)sender ;
        }

        I'm a bit confused if you if you are trying to bind the data to the ListBox in an event for the ListBox; if that's what you are asking, then I think you'd be better off binding the data to the ListBox in the containing page.

        Scott
        "Chris Leuty" <chris.leuty-at-nospam.brinker. com> wrote in message news:%23bmnrLHL EHA.892@TK2MSFT NGP09.phx.gbl.. .
        The listbox is currently in the aspx, bound like this:
        <TD vAlign="top" align="right">
        <asp:label id="Label13" runat="server" CssClass="form-label">Trades</asp:label>
        </TD>
        <TD>
        <asp:listbox id="lstTrades" runat="server" CssClass="form-text" Width="154px" SelectionMode=" Multiple" DataSource='<%# ContactInfo1 %>' DataMember="Tra des" DataTextField=" TradeName" DataValueField= "TradeID">
        </asp:listbox>
        </TD>
        I have code similar to your examples in the codebehind, but I'm having a hard time finding a place where the Listbox is available as an object (or perhaps my code is fubar). I'm trying to get the listbox reference for the asp:listbox item above by doing the following (in this case, I was doing it during the event that bound the data. e is a DataListCommand EventArgs):
        lstTrades = CType(e.Item.Fi ndControl("lstT rades"), ListBox)
        I think once I get to that point, the actual selection based on the data will be easy. So far, I haven't found a good place to hook this line (I keep getting back Nothing).


        "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:OEfke5FLEH A.3596@tk2msftn gp13.phx.gbl...

        I think you should be able to do this with a single table; have you tried something like:

        ListBox lb = new ListBox();
        lb.SelectionMod e = ListSelectionMo de.Multiple;
        lb.DataSource = whatever;
        lb.DataBind();
        // now set from the list box
        foreach (ListItem item in lb.Items)
        {
        if (IsItemSelected (item.Value)) // IsItemSelected is your method
        {
        item.Selected = true;
        }
        }

        // or do it from the data side
        foreach (DataRow row in whatever)
        {
        // blah, whatever you have to determine what's selected.
        if (row["IsSelected "] == "True")
        {
        lb.Items.FindBy Value(row["Value"].ToString()).Se lected = true;
        }
        }

        Scott


        "Chris Leuty" <chris.leuty@no spam.briniker.c om> wrote in message news:OY02of8KEH A.3216@tk2msftn gp13.phx.gbl...
        I am populating a multiselect Listbox from a dataset, with the content of
        the listbox filled by one table, and the selections determined from another
        table. So far, I have been keeping the dataset a denormalized mirror of the
        database, but I'm not having much luck getting the selection logic down (I
        haven't found a 'hook' where I can access the listbox object as an object to
        set the listitem's selected property before it gets rendered)..

        Before denormalizing the data in hopes of simplifying the binding, I thought
        I would ask if I was missing an obviously simple approach to doing what I am
        after (and leaving the dataset denormalized).

        Thanks


        Comment

        • Chris Leuty

          #5
          Re: Populating Mulitiselect Listbox

          I did bind the list data in the asp:listbox. What I'm trying to do now is mark certain items as selected, which is found in a different table. To be specific, the listbox contains trades (Plumbing, Electrical, Masonry, etc), and a second table contains the trades that apply to the displayed form (i.e. this vendor does this sort of work). This listbox is part of an Edit Template on a DataList (so that the selections can be changed).

          I chose DataBinding() only as an example of where I have tried to get a reference to the listbox (it didn't work). I had to define the listbox in the code (VS.NET did not create a reference to it; I figured it was because it was part of the Edit Template, which is late bound), so I felt that I needed to find a place in the process where the listbox was created, but not yet sent back to the browser. The point where the data is bound seemed to make the most sense to me, but I can't grab a reference to it.

          Thanks for your help so far.
          "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:eOpgNWHLEH A.2100@TK2MSFTN GP10.phx.gbl...

          A good spot is probably Page_Load; if you are using the default code that VS.NET generates then this method should be there.... again, if you are using VS.NET there should already be a member field call "lstTrades" as a protected member of the code behind for the ASPX page.

          If you want the ListBox during a ListBox DataBinding event; then just CType the sender (the first parent) to the event handler; In C# that might look like (for the ListBox DataBindingEven t):

          private void lstTrades_DataB inding(object sender, EventArgs e)
          {
          ListBox lb = (ListBox)sender ;
          }

          I'm a bit confused if you if you are trying to bind the data to the ListBox in an event for the ListBox; if that's what you are asking, then I think you'd be better off binding the data to the ListBox in the containing page.

          Scott
          "Chris Leuty" <chris.leuty-at-nospam.brinker. com> wrote in message news:%23bmnrLHL EHA.892@TK2MSFT NGP09.phx.gbl.. .
          The listbox is currently in the aspx, bound like this:
          <TD vAlign="top" align="right">
          <asp:label id="Label13" runat="server" CssClass="form-label">Trades</asp:label>
          </TD>
          <TD>
          <asp:listbox id="lstTrades" runat="server" CssClass="form-text" Width="154px" SelectionMode=" Multiple" DataSource='<%# ContactInfo1 %>' DataMember="Tra des" DataTextField=" TradeName" DataValueField= "TradeID">
          </asp:listbox>
          </TD>
          I have code similar to your examples in the codebehind, but I'm having a hard time finding a place where the Listbox is available as an object (or perhaps my code is fubar). I'm trying to get the listbox reference for the asp:listbox item above by doing the following (in this case, I was doing it during the event that bound the data. e is a DataListCommand EventArgs):
          lstTrades = CType(e.Item.Fi ndControl("lstT rades"), ListBox)
          I think once I get to that point, the actual selection based on the data will be easy. So far, I haven't found a good place to hook this line (I keep getting back Nothing).


          "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:OEfke5FLEH A.3596@tk2msftn gp13.phx.gbl...

          I think you should be able to do this with a single table; have you tried something like:

          ListBox lb = new ListBox();
          lb.SelectionMod e = ListSelectionMo de.Multiple;
          lb.DataSource = whatever;
          lb.DataBind();
          // now set from the list box
          foreach (ListItem item in lb.Items)
          {
          if (IsItemSelected (item.Value)) // IsItemSelected is your method
          {
          item.Selected = true;
          }
          }

          // or do it from the data side
          foreach (DataRow row in whatever)
          {
          // blah, whatever you have to determine what's selected.
          if (row["IsSelected "] == "True")
          {
          lb.Items.FindBy Value(row["Value"].ToString()).Se lected = true;
          }
          }

          Scott


          "Chris Leuty" <chris.leuty@no spam.briniker.c om> wrote in message news:OY02of8KEH A.3216@tk2msftn gp13.phx.gbl...
          I am populating a multiselect Listbox from a dataset, with the content of
          the listbox filled by one table, and the selections determined from another
          table. So far, I have been keeping the dataset a denormalized mirror of the
          database, but I'm not having much luck getting the selection logic down (I
          haven't found a 'hook' where I can access the listbox object as an object to
          set the listitem's selected property before it gets rendered)..

          Before denormalizing the data in hopes of simplifying the binding, I thought
          I would ask if I was missing an obviously simple approach to doing what I am
          after (and leaving the dataset denormalized).

          Thanks


          Comment

          • Scott G.

            #6
            Re: Populating Mulitiselect Listbox


            Got it; here's an example in C# that gets you to the control; in the DG_EditCommand handler, you'll see that I grab the index of the item and then grab the item to get the ListBox1; now this seems to be the same as the code you posted in a message or two ago. If you run this page as a test you should see the "found control" message.

            Scott


            <%@ Page language="c#" AutoEventWireup ="false" Trace="true" %>
            <%@ Import Namespace="Syst em.Data" %>
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
            <html>
            <head>
            <title>DGBind </title>
            <script language="C#" runat="server">
            protected override void OnLoad(EventArg s e)
            {
            this.DG.DataSou rce = MyFakeDataSet;
            this.DG.DataMem ber = "Table1";
            this.DG.EditCom mand += new DataGridCommand EventHandler(DG _EditCommand);
            this.DG.CancelC ommand += new DataGridCommand EventHandler(DG _CancelCommand) ;
            if (!this.IsPostBa ck)
            {
            this.DG.DataBin d();
            }
            }

            private void DG_EditCommand( object source, DataGridCommand EventArgs e)
            {
            this.DG.EditIte mIndex = e.Item.ItemInde x;
            this.DG.DataBin d();
            ListBox lb = (ListBox)this.D G.Items[e.Item.ItemInde x].FindControl("L istBox1");
            if (lb != null)
            {
            this.Trace.Warn ("found control");
            }
            }

            private void DG_CancelComman d(object source, DataGridCommand EventArgs e)
            {
            this.DG.EditIte mIndex = -1;
            this.DG.DataBin d();
            }

            private DataSet m_ds;
            private DataSet MyFakeDataSet {
            get {
            if (m_ds != null) {
            return m_ds;
            }
            m_ds = new DataSet();
            DataTable t = new DataTable("Tabl e1");
            t.Columns.Add(" Column1");
            m_ds.Tables.Add (t);

            for (int i = 0; i < 10; i++) {
            DataRow r = m_ds.Tables[0].NewRow();
            r["Column1"] = i.ToString();
            m_ds.Tables[0].Rows.Add(r);
            }
            return m_ds;
            }
            }
            </script>
            </head>
            <body>
            <form id="Form1" method="post" runat="server">
            <asp:datagrid id="DG" runat="server" autogeneratecol umns="False">
            <columns>
            <asp:editcomman dcolumn buttontype="Lin kButton" updatetext="Upd ate" headertext="Col umn1" canceltext="Can cel"
            edittext="Edit" ></asp:editcommand column>
            <asp:templateco lumn headertext="Col umn1">
            <itemtemplate >
            <asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval (Container, "DataItem.Colum n1") %>'>
            </asp:label>
            </itemtemplate>
            <edititemtempla te>
            <asp:listbox id="ListBox1" runat="server"> </asp:listbox>
            </edititemtemplat e>
            </asp:templatecol umn>
            </columns>
            </asp:datagrid>
            </form>
            </body>
            </html>

            "Chris Leuty" <chris.leuty-at-nospam.brinker. com> wrote in message news:euPitxHLEH A.624@TK2MSFTNG P11.phx.gbl...
            I did bind the list data in the asp:listbox. What I'm trying to do now is mark certain items as selected, which is found in a different table. To be specific, the listbox contains trades (Plumbing, Electrical, Masonry, etc), and a second table contains the trades that apply to the displayed form (i.e. this vendor does this sort of work). This listbox is part of an Edit Template on a DataList (so that the selections can be changed).

            I chose DataBinding() only as an example of where I have tried to get a reference to the listbox (it didn't work). I had to define the listbox in the code (VS.NET did not create a reference to it; I figured it was because it was part of the Edit Template, which is late bound), so I felt that I needed to find a place in the process where the listbox was created, but not yet sent back to the browser. The point where the data is bound seemed to make the most sense to me, but I can't grab a reference to it.

            Thanks for your help so far.
            "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:eOpgNWHLEH A.2100@TK2MSFTN GP10.phx.gbl...

            A good spot is probably Page_Load; if you are using the default code that VS.NET generates then this method should be there.... again, if you are using VS.NET there should already be a member field call "lstTrades" as a protected member of the code behind for the ASPX page.

            If you want the ListBox during a ListBox DataBinding event; then just CType the sender (the first parent) to the event handler; In C# that might look like (for the ListBox DataBindingEven t):

            private void lstTrades_DataB inding(object sender, EventArgs e)
            {
            ListBox lb = (ListBox)sender ;
            }

            I'm a bit confused if you if you are trying to bind the data to the ListBox in an event for the ListBox; if that's what you are asking, then I think you'd be better off binding the data to the ListBox in the containing page.

            Scott
            "Chris Leuty" <chris.leuty-at-nospam.brinker. com> wrote in message news:%23bmnrLHL EHA.892@TK2MSFT NGP09.phx.gbl.. .
            The listbox is currently in the aspx, bound like this:
            <TD vAlign="top" align="right">
            <asp:label id="Label13" runat="server" CssClass="form-label">Trades</asp:label>
            </TD>
            <TD>
            <asp:listbox id="lstTrades" runat="server" CssClass="form-text" Width="154px" SelectionMode=" Multiple" DataSource='<%# ContactInfo1 %>' DataMember="Tra des" DataTextField=" TradeName" DataValueField= "TradeID">
            </asp:listbox>
            </TD>
            I have code similar to your examples in the codebehind, but I'm having a hard time finding a place where the Listbox is available as an object (or perhaps my code is fubar). I'm trying to get the listbox reference for the asp:listbox item above by doing the following (in this case, I was doing it during the event that bound the data. e is a DataListCommand EventArgs):
            lstTrades = CType(e.Item.Fi ndControl("lstT rades"), ListBox)
            I think once I get to that point, the actual selection based on the data will be easy. So far, I haven't found a good place to hook this line (I keep getting back Nothing).


            "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:OEfke5FLEH A.3596@tk2msftn gp13.phx.gbl...

            I think you should be able to do this with a single table; have you tried something like:

            ListBox lb = new ListBox();
            lb.SelectionMod e = ListSelectionMo de.Multiple;
            lb.DataSource = whatever;
            lb.DataBind();
            // now set from the list box
            foreach (ListItem item in lb.Items)
            {
            if (IsItemSelected (item.Value)) // IsItemSelected is your method
            {
            item.Selected = true;
            }
            }

            // or do it from the data side
            foreach (DataRow row in whatever)
            {
            // blah, whatever you have to determine what's selected.
            if (row["IsSelected "] == "True")
            {
            lb.Items.FindBy Value(row["Value"].ToString()).Se lected = true;
            }
            }

            Scott


            "Chris Leuty" <chris.leuty@no spam.briniker.c om> wrote in message news:OY02of8KEH A.3216@tk2msftn gp13.phx.gbl...
            I am populating a multiselect Listbox from a dataset, with the content of
            the listbox filled by one table, and the selections determined from another
            table. So far, I have been keeping the dataset a denormalized mirror of the
            database, but I'm not having much luck getting the selection logic down (I
            haven't found a 'hook' where I can access the listbox object as an object to
            set the listitem's selected property before it gets rendered)..

            Before denormalizing the data in hopes of simplifying the binding, I thought
            I would ask if I was missing an obviously simple approach to doing what I am
            after (and leaving the dataset denormalized).

            Thanks


            Comment

            • Chris Leuty

              #7
              Re: Populating Mulitiselect Listbox

              Thanks, that worked. I converted the C# into VB and it looked like this:
              lstTrades = CType(dlContact List.Items(e.It em.ItemIndex).F indControl("lst Trades"), ListBox)

              VB casting is nasty looking to me (I much prefer C#, but I inherited this project....you know how that goes...). Anyway, you can see that the old line (lstTrades = CType(e.Item.Fi ndControl("lstT rades"), ListBox)) is simply looking in the wrong Item collection. Would help to look in the DataList hierarchy. Duh.

              Thanks for the help

              Chris

              "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:uBunlOILEH A.3332@TK2MSFTN GP10.phx.gbl...

              Got it; here's an example in C# that gets you to the control; in the DG_EditCommand handler, you'll see that I grab the index of the item and then grab the item to get the ListBox1; now this seems to be the same as the code you posted in a message or two ago. If you run this page as a test you should see the "found control" message.

              Scott


              <%@ Page language="c#" AutoEventWireup ="false" Trace="true" %>
              <%@ Import Namespace="Syst em.Data" %>
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
              <html>
              <head>
              <title>DGBind </title>
              <script language="C#" runat="server">
              protected override void OnLoad(EventArg s e)
              {
              this.DG.DataSou rce = MyFakeDataSet;
              this.DG.DataMem ber = "Table1";
              this.DG.EditCom mand += new DataGridCommand EventHandler(DG _EditCommand);
              this.DG.CancelC ommand += new DataGridCommand EventHandler(DG _CancelCommand) ;
              if (!this.IsPostBa ck)
              {
              this.DG.DataBin d();
              }
              }

              private void DG_EditCommand( object source, DataGridCommand EventArgs e)
              {
              this.DG.EditIte mIndex = e.Item.ItemInde x;
              this.DG.DataBin d();
              ListBox lb = (ListBox)this.D G.Items[e.Item.ItemInde x].FindControl("L istBox1");
              if (lb != null)
              {
              this.Trace.Warn ("found control");
              }
              }

              private void DG_CancelComman d(object source, DataGridCommand EventArgs e)
              {
              this.DG.EditIte mIndex = -1;
              this.DG.DataBin d();
              }

              private DataSet m_ds;
              private DataSet MyFakeDataSet {
              get {
              if (m_ds != null) {
              return m_ds;
              }
              m_ds = new DataSet();
              DataTable t = new DataTable("Tabl e1");
              t.Columns.Add(" Column1");
              m_ds.Tables.Add (t);

              for (int i = 0; i < 10; i++) {
              DataRow r = m_ds.Tables[0].NewRow();
              r["Column1"] = i.ToString();
              m_ds.Tables[0].Rows.Add(r);
              }
              return m_ds;
              }
              }
              </script>
              </head>
              <body>
              <form id="Form1" method="post" runat="server">
              <asp:datagrid id="DG" runat="server" autogeneratecol umns="False">
              <columns>
              <asp:editcomman dcolumn buttontype="Lin kButton" updatetext="Upd ate" headertext="Col umn1" canceltext="Can cel"
              edittext="Edit" ></asp:editcommand column>
              <asp:templateco lumn headertext="Col umn1">
              <itemtemplate >
              <asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval (Container, "DataItem.Colum n1") %>'>
              </asp:label>
              </itemtemplate>
              <edititemtempla te>
              <asp:listbox id="ListBox1" runat="server"> </asp:listbox>
              </edititemtemplat e>
              </asp:templatecol umn>
              </columns>
              </asp:datagrid>
              </form>
              </body>
              </html>

              "Chris Leuty" <chris.leuty-at-nospam.brinker. com> wrote in message news:euPitxHLEH A.624@TK2MSFTNG P11.phx.gbl...
              I did bind the list data in the asp:listbox. What I'm trying to do now is mark certain items as selected, which is found in a different table. To be specific, the listbox contains trades (Plumbing, Electrical, Masonry, etc), and a second table contains the trades that apply to the displayed form (i.e. this vendor does this sort of work). This listbox is part of an Edit Template on a DataList (so that the selections can be changed).

              I chose DataBinding() only as an example of where I have tried to get a reference to the listbox (it didn't work). I had to define the listbox in the code (VS.NET did not create a reference to it; I figured it was because it was part of the Edit Template, which is late bound), so I felt that I needed to find a place in the process where the listbox was created, but not yet sent back to the browser. The point where the data is bound seemed to make the most sense to me, but I can't grab a reference to it.

              Thanks for your help so far.
              "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:eOpgNWHLEH A.2100@TK2MSFTN GP10.phx.gbl...

              A good spot is probably Page_Load; if you are using the default code that VS.NET generates then this method should be there.... again, if you are using VS.NET there should already be a member field call "lstTrades" as a protected member of the code behind for the ASPX page.

              If you want the ListBox during a ListBox DataBinding event; then just CType the sender (the first parent) to the event handler; In C# that might look like (for the ListBox DataBindingEven t):

              private void lstTrades_DataB inding(object sender, EventArgs e)
              {
              ListBox lb = (ListBox)sender ;
              }

              I'm a bit confused if you if you are trying to bind the data to the ListBox in an event for the ListBox; if that's what you are asking, then I think you'd be better off binding the data to the ListBox in the containing page.

              Scott
              "Chris Leuty" <chris.leuty-at-nospam.brinker. com> wrote in message news:%23bmnrLHL EHA.892@TK2MSFT NGP09.phx.gbl.. .
              The listbox is currently in the aspx, bound like this:
              <TD vAlign="top" align="right">
              <asp:label id="Label13" runat="server" CssClass="form-label">Trades</asp:label>
              </TD>
              <TD>
              <asp:listbox id="lstTrades" runat="server" CssClass="form-text" Width="154px" SelectionMode=" Multiple" DataSource='<%# ContactInfo1 %>' DataMember="Tra des" DataTextField=" TradeName" DataValueField= "TradeID">
              </asp:listbox>
              </TD>
              I have code similar to your examples in the codebehind, but I'm having a hard time finding a place where the Listbox is available as an object (or perhaps my code is fubar). I'm trying to get the listbox reference for the asp:listbox item above by doing the following (in this case, I was doing it during the event that bound the data. e is a DataListCommand EventArgs):
              lstTrades = CType(e.Item.Fi ndControl("lstT rades"), ListBox)
              I think once I get to that point, the actual selection based on the data will be easy. So far, I haven't found a good place to hook this line (I keep getting back Nothing).


              "Scott G." <noemail@this-is-extra-hotmail.com> wrote in message news:OEfke5FLEH A.3596@tk2msftn gp13.phx.gbl...

              I think you should be able to do this with a single table; have you tried something like:

              ListBox lb = new ListBox();
              lb.SelectionMod e = ListSelectionMo de.Multiple;
              lb.DataSource = whatever;
              lb.DataBind();
              // now set from the list box
              foreach (ListItem item in lb.Items)
              {
              if (IsItemSelected (item.Value)) // IsItemSelected is your method
              {
              item.Selected = true;
              }
              }

              // or do it from the data side
              foreach (DataRow row in whatever)
              {
              // blah, whatever you have to determine what's selected.
              if (row["IsSelected "] == "True")
              {
              lb.Items.FindBy Value(row["Value"].ToString()).Se lected = true;
              }
              }

              Scott


              "Chris Leuty" <chris.leuty@no spam.briniker.c om> wrote in message news:OY02of8KEH A.3216@tk2msftn gp13.phx.gbl...
              I am populating a multiselect Listbox from a dataset, with the content of
              the listbox filled by one table, and the selections determined from another
              table. So far, I have been keeping the dataset a denormalized mirror of the
              database, but I'm not having much luck getting the selection logic down (I
              haven't found a 'hook' where I can access the listbox object as an object to
              set the listitem's selected property before it gets rendered)..

              Before denormalizing the data in hopes of simplifying the binding, I thought
              I would ask if I was missing an obviously simple approach to doing what I am
              after (and leaving the dataset denormalized).

              Thanks


              Comment

              Working...