unable to cast type System.Web.UI.Control to System.Web.UI.WebControls.Label and object set to null

Discussion in 'ASP .Net' started by Andy B, Apr 23, 2008.

  1. Andy B

    Andy B Guest

    I have the following listView control on a page:

    <asp:ListView ID="ListView1" runat="server"
    ItemPlaceholderID="PlaceHolder1">

    <ItemTemplate>

    <dl>

    <dt>

    <asp:Label ID="Label1" runat="server" Text='Eval("Keys")'></asp:Label>

    </dt>

    <dd>

    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

    </dd>

    </dl>

    </ItemTemplate>

    <LayoutTemplate>

    <asp:placeHolder ID="PlaceHolder1" runat="server"></asp:placeHolder>

    </LayoutTemplate>

    </asp:ListView>

    The code behind for the page that it is on is below. I am trying to get the
    text for the key and value pair into the labels above. I get 2 different
    errors depending on what I use in the code behind. There will be comments
    where required.

    namespace Contracts {

    public partial class _Default : System.Web.UI.Page {

    //create a contract for use in the page.

    Contract StockContract = new Contract();

    protected void Page_Load(object sender, EventArgs e) {

    //create a ContractDictionary and assign it to the Dictionary property.

    StockContract.Dictionary = new ContractDictionary<string, string>();



    //add an entry to the dictionary

    StockContract.Dictionary.Add("Word", "Just testing here...");



    //dataBind the listview control where the entries from the dictionary will
    be seen to the Dictionary

    ListView1.DataSource = StockContract.Dictionary;

    ListView1.DataBind();

    //these next 2 lines cause a 'unable to cast type System.Web.UI.Control to
    System.Web.UI.WebControls.Label error.

    //Label WordLabel = (Label)ListView1.Controls[0];

    //Label DefinitionLabel = (Label)ListView1.Controls[1];



    //these next 2 lines cause an 'Object set to null reference' error.

    //Label WordLabel = (Label)ListView1.FindControl("Label1");

    //Label DefinitionLabel = (Label)ListView1.FindControl("Label2");



    //cycle through the key/value pair and give the values to the Labels inside
    the ListView1.

    foreach(KeyValuePair<string, string> values in StockContract.Dictionary) {

    WordLabel.Text = values.Key;

    DefinitionLabel.Text = values.Value;

    }

    }

    }

    }



    Any ideas how to fix this?
     
    Andy B, Apr 23, 2008
    #1
    1. Advertising

  2. Andy B

    bruce barker Guest

    RE: unable to cast type System.Web.UI.Control to System.Web.UI.WebCont

    you labels are not direct children of the listview. they are children of the
    template that is a child of the listview. you need to do a recursive search
    for the labels.

    -- bruce (sqlwork.com)


    "Andy B" wrote:

    > I have the following listView control on a page:
    >
    > <asp:ListView ID="ListView1" runat="server"
    > ItemPlaceholderID="PlaceHolder1">
    >
    > <ItemTemplate>
    >
    > <dl>
    >
    > <dt>
    >
    > <asp:Label ID="Label1" runat="server" Text='Eval("Keys")'></asp:Label>
    >
    > </dt>
    >
    > <dd>
    >
    > <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    >
    > </dd>
    >
    > </dl>
    >
    > </ItemTemplate>
    >
    > <LayoutTemplate>
    >
    > <asp:placeHolder ID="PlaceHolder1" runat="server"></asp:placeHolder>
    >
    > </LayoutTemplate>
    >
    > </asp:ListView>
    >
    > The code behind for the page that it is on is below. I am trying to get the
    > text for the key and value pair into the labels above. I get 2 different
    > errors depending on what I use in the code behind. There will be comments
    > where required.
    >
    > namespace Contracts {
    >
    > public partial class _Default : System.Web.UI.Page {
    >
    > //create a contract for use in the page.
    >
    > Contract StockContract = new Contract();
    >
    > protected void Page_Load(object sender, EventArgs e) {
    >
    > //create a ContractDictionary and assign it to the Dictionary property.
    >
    > StockContract.Dictionary = new ContractDictionary<string, string>();
    >
    >
    >
    > //add an entry to the dictionary
    >
    > StockContract.Dictionary.Add("Word", "Just testing here...");
    >
    >
    >
    > //dataBind the listview control where the entries from the dictionary will
    > be seen to the Dictionary
    >
    > ListView1.DataSource = StockContract.Dictionary;
    >
    > ListView1.DataBind();
    >
    > //these next 2 lines cause a 'unable to cast type System.Web.UI.Control to
    > System.Web.UI.WebControls.Label error.
    >
    > //Label WordLabel = (Label)ListView1.Controls[0];
    >
    > //Label DefinitionLabel = (Label)ListView1.Controls[1];
    >
    >
    >
    > //these next 2 lines cause an 'Object set to null reference' error.
    >
    > //Label WordLabel = (Label)ListView1.FindControl("Label1");
    >
    > //Label DefinitionLabel = (Label)ListView1.FindControl("Label2");
    >
    >
    >
    > //cycle through the key/value pair and give the values to the Labels inside
    > the ListView1.
    >
    > foreach(KeyValuePair<string, string> values in StockContract.Dictionary) {
    >
    > WordLabel.Text = values.Key;
    >
    > DefinitionLabel.Text = values.Value;
    >
    > }
    >
    > }
    >
    > }
    >
    > }
    >
    >
    >
    > Any ideas how to fix this?
    >
    >
    >
    >
    >
    >
    >
     
    bruce barker, Apr 23, 2008
    #2
    1. Advertising

  3. Andy B

    Andy B Guest

    Re: unable to cast type System.Web.UI.Control to System.Web.UI.WebCont

    How do you do this?


    "bruce barker" <> wrote in message
    news:...
    > you labels are not direct children of the listview. they are children of
    > the
    > template that is a child of the listview. you need to do a recursive
    > search
    > for the labels.
    >
    > -- bruce (sqlwork.com)
    >
    >
    > "Andy B" wrote:
    >
    >> I have the following listView control on a page:
    >>
    >> <asp:ListView ID="ListView1" runat="server"
    >> ItemPlaceholderID="PlaceHolder1">
    >>
    >> <ItemTemplate>
    >>
    >> <dl>
    >>
    >> <dt>
    >>
    >> <asp:Label ID="Label1" runat="server" Text='Eval("Keys")'></asp:Label>
    >>
    >> </dt>
    >>
    >> <dd>
    >>
    >> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    >>
    >> </dd>
    >>
    >> </dl>
    >>
    >> </ItemTemplate>
    >>
    >> <LayoutTemplate>
    >>
    >> <asp:placeHolder ID="PlaceHolder1" runat="server"></asp:placeHolder>
    >>
    >> </LayoutTemplate>
    >>
    >> </asp:ListView>
    >>
    >> The code behind for the page that it is on is below. I am trying to get
    >> the
    >> text for the key and value pair into the labels above. I get 2 different
    >> errors depending on what I use in the code behind. There will be comments
    >> where required.
    >>
    >> namespace Contracts {
    >>
    >> public partial class _Default : System.Web.UI.Page {
    >>
    >> //create a contract for use in the page.
    >>
    >> Contract StockContract = new Contract();
    >>
    >> protected void Page_Load(object sender, EventArgs e) {
    >>
    >> //create a ContractDictionary and assign it to the Dictionary property.
    >>
    >> StockContract.Dictionary = new ContractDictionary<string, string>();
    >>
    >>
    >>
    >> //add an entry to the dictionary
    >>
    >> StockContract.Dictionary.Add("Word", "Just testing here...");
    >>
    >>
    >>
    >> //dataBind the listview control where the entries from the dictionary
    >> will
    >> be seen to the Dictionary
    >>
    >> ListView1.DataSource = StockContract.Dictionary;
    >>
    >> ListView1.DataBind();
    >>
    >> //these next 2 lines cause a 'unable to cast type System.Web.UI.Control
    >> to
    >> System.Web.UI.WebControls.Label error.
    >>
    >> //Label WordLabel = (Label)ListView1.Controls[0];
    >>
    >> //Label DefinitionLabel = (Label)ListView1.Controls[1];
    >>
    >>
    >>
    >> //these next 2 lines cause an 'Object set to null reference' error.
    >>
    >> //Label WordLabel = (Label)ListView1.FindControl("Label1");
    >>
    >> //Label DefinitionLabel = (Label)ListView1.FindControl("Label2");
    >>
    >>
    >>
    >> //cycle through the key/value pair and give the values to the Labels
    >> inside
    >> the ListView1.
    >>
    >> foreach(KeyValuePair<string, string> values in StockContract.Dictionary)
    >> {
    >>
    >> WordLabel.Text = values.Key;
    >>
    >> DefinitionLabel.Text = values.Value;
    >>
    >> }
    >>
    >> }
    >>
    >> }
    >>
    >> }
    >>
    >>
    >>
    >> Any ideas how to fix this?
    >>
    >>
    >>
    >>
    >>
    >>
    >>
     
    Andy B, Apr 23, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page