ASP.NET DropDownList findControl

Odpowiedz Nowy wątek
2014-08-08 08:46
0

Witam
czy jest ktos w stanie wytłumaczyć mi dlaczego nie mogę odwołać się do kontrolki DropDownList w code-behind?? Dodam że kontrola znajduje się w innej kontrolce w ListView Dopiero gdy kontrolka DropDownList znajdzie się poza kontrolką ListView mogę się do niej odwołać, w czym tkwi diabeł ? Pozdrawiam

edytowany 1x, ostatnio: Rejencina, 2014-08-08 09:40

Pozostało 580 znaków

2014-08-08 11:04
0

Głowy nie dam ale być może musisz odwołać poprzez pole z listviewa

Pozostało 580 znaków

2014-08-08 11:40
0

jak mógłbys podać jakis przykład był bym wdzięczny :)

Pozostało 580 znaków

2014-08-08 11:48
cw
0

DropDownList ddl = (DropDownList) this.Listview1.FindControl("DropDownList1")

Pozostało 580 znaków

2014-08-08 11:49
1

Zawartość ListView jest generowana dynamicznie, dopóki nie wstawisz do niego żadnych danych, to żaden DropDownList w nim nie istnieje. Prawdopodobnie możesz znaleźć tą kontrolkę programowo przeszukując w mniej więcej taki sposób:

var dropDownList = this.myListView.FindControl("dropDownListId") as DropDownList;

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2014-08-08 11:58
0

Własnie sek w tym że ja potrzebuje wygenerowac te dane w DropDownList napisałem takie o to zdarzenie które ma być za to odpowiedzialne ale wywala błąd typu: Object reference not set to an instance of an object. Dla zilustrowania problemu:

 protected void ListView1_OnLoad(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {

            DropDownList dropdownlist = (DropDownList)ListView1.FindControl("DropDownList1");
            string ktr, mtr;
            for (int k = 0; k < 24; k++)
            {
                for (int m = 0; m < 60; m = m + 5)
                {

                    if (k < 10)
                    {
                        ktr = "0" + k.ToString();
                    }
                    else
                    {
                        ktr = k.ToString();
                    }
                    if (m < 10)
                    {
                        mtr = "0" + m.ToString();
                    }
                    else
                    {
                        mtr = m.ToString();
                    }
                    dropdownlist.Items.Add(new ListItem(ktr + ":" + mtr));

                }
            }
        }
    }

update.png

Pozostało 580 znaków

2014-08-08 13:20
0

Podczas Page_Load ten DropDownList nie istnieje. Zrób to w zdarzeniu ItemDataBound.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
zrobiłem tak jak mówisz ale prawdopodobnie problem tkwi w nie znalezionej kontrolce ;/ - Rejencina 2014-08-08 13:45

Pozostało 580 znaków

2014-08-08 13:22
0

a więc tak MSDN poleca prosty i skuteczny sposób na sprawdzenie czy kontrolka została znaleziona. Napisałem zdarzenie dla przycisku generujące odpowiedź cos takeigo:

  protected void btnSubmit_Click( object sender, EventArgs e )

        {
            // Find control on page.
            Control myControl1 = this.ListView1.FindControl("DropDownList1");
            if (myControl1 != null)
            {
                // Get control's parent.
                Control myControl2 = myControl1.Parent;
                Label5.Text = ("Parent of the text box is : " + myControl2.ID);
            }
            else
            {
                Label5.Text = ("Control not found");

            }
        }

jakieś inne sugestie?

Pozostało 580 znaków

2014-08-08 13:50
0

Zrozum wreszcie, że tego DropDownList nie ma w ListView, więc nie znajdziesz go w Page_Load ani Button_Click. Użyj zdarzenia ItemDataBound! W nim, w argumencie e, będzie właściwość np. Item i na tym poziomie trzeba szukać dynamicznie wygenerowanej kontrolki.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2014-08-08 15:32
0

Właśnie staram się to zrozumieć.. jestem osobą początkującą :) więc proszę o wyrozumiałość. Kod przedstawia się następująco i wciąż nie działa
site.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

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

    protected void Item_Bound(object sender, ListViewItemEventArgs e)
    {    
        var myControl = (DropDownList)e.Item.FindControl("DropDownList1");
        if (myControl != null)
        {
            Label5.Text = ("Found");
        }
        else
        {
            Label5.Text = ("Not found");

        }

    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }

}

site.aspx

 <div id="form-view">         
              <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                  ConnectionString="<%$ ConnectionStrings:practiceConnectionString %>" 
                  SelectCommand="SELECT k.idKlienci, k.imie, k.nazwisko, k.adres, k.miasto, r.idRezerwacje, r.data, r.godzina, r.idKlienci FROM klienci AS k INNER JOIN rezerwacje AS r ON k.idKlienci = r.idKlienci"
                  UpdateCommand="UPDATE Klienci SET imie = @imie, nazwisko = @nazwisko, adres = @adres, miasto = @miasto  WHERE (idKlienci = @IdKlienci)UPDATE rezerwacje SET data = @data, godzina = @godzina  WHERE (idRezerwacje = @idRezerwacje)"                               
               ></asp:SqlDataSource>
            <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1"  DataKeyNames="idRezerwacje, idKlienci" ConvertEmptyStringToNull="true"  OnItemDataBound="Item_Bound">    
             <LayoutTemplate>              
                    <asp:DataPager ID="DataPager1" runat="server" PageSize="10" >
                                <Fields>
                                    <asp:NextPreviousPagerField ButtonType="Link" ButtonCssClass="pagin" ShowFirstPageButton="true"/>
                                    <asp:NumericPagerField  NumericButtonCssClass="pagin" CurrentPageLabelCssClass="pagin"/>                                  
                                </Fields>
                    </asp:DataPager>
                    <table cellpadding="2" runat="server" id="tblDepartments" width="640px" cellspacing="1">

                        <tr id="Tr1" runat="server" class="TableHeader">
                            <td id="Td1" runat="server">Edycja</td>                                     
                            <td id="Td2" runat="server">imie</td>                     
                            <td id="Td3" runat="server">nazwisko</td> 
                            <td id="Td7" runat="server">adres</td>                       
                            <td id="Td8" runat="server">miasto</td>                              
                            <td id="Td5" runat="server">data</td>                       
                            <td id="Td6" runat="server">godzina</td>                                                                  
                        </tr>              
                         <tr runat="server" id="itemPlaceholder" />
                     </table>
             </LayoutTemplate>   
             <EditItemTemplate>
               <tr >
                <td>
                  <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="Update" />
                  <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancel" />
                </td>              
                <td>
                  <asp:Label runat="server" ID="NameLabel" AssociatedControlID="NameTextBox" Text="Imie" Font-Bold="true"/><br />
                  <asp:TextBox ID="NameTextBox" runat="server" Text='<%#Bind("imie") %>' />
                </td>
                <td>
                  <asp:Label runat="server" ID="GroupNameLabel" AssociatedControlID="SurnameTextBox" Text="Nazwisko" Font-Bold="true" /><br />
                  <asp:TextBox ID="SurnameTextBox" runat="server"  Width="150px" Text='<%#Bind("nazwisko") %>' />
                  <br/>
                </td>
                <td>
                  <asp:Label runat="server" ID="Label1" AssociatedControlID="AdressTextBox" Text="Adres" Font-Bold="true" /><br />
                  <asp:TextBox ID="AdressTextBox" runat="server"  Width="150px" Text='<%#Bind("adres") %>' />
                  <br/>
                </td>
                <td >
                  <asp:Label runat="server" ID="Label2" AssociatedControlID="CityTextBox" Text="Miasto" Font-Bold="true" /><br />
                  <asp:TextBox ID="CityTextBox" runat="server"  Width="150px" Text='<%#Bind("miasto") %>' />
                  <br/>
                </td>
                <td class="EditItem">        
                  <asp:Label runat="server" ID="Label3" AssociatedControlID="DateTextBox" Text="Data" Font-Bold="true" /><br />
                    <div id="ab">
                         <div id="a"><asp:TextBox ID="DateTextBox" runat="server" ClientIDMode="Static" Width="100px" Text='<%#Bind("data") %>' /></div>
                         <div id="b"><asp:image ID="Image1" runat="server" CssClass="image" style="cursor:hand;" onclick="PopupDatePicker('DateTextBox')" ImageUrl="~/image/ikon.png" /></div>
                   </div>                  
                </td>
                 <td >
                  <asp:Label runat="server" ID="Label4" Text="Godzina" Font-Bold="true" /><br />
                  <asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
                </td>
              </tr>
            </EditItemTemplate>   
            <ItemTemplate>
                  <tr  runat="server">
                    <td>
                      <asp:Button ID="EditButton" runat="server" Text="Edit" CommandName="Edit" />
                    </td>                 
                    <td>
                      <asp:Label ID="NameLabel" runat="server" Text='<%#Eval("imie") %>' />
                    </td>
                    <td>
                      <asp:Label ID="SurnameLabel" runat="server" Text='<%#Eval("nazwisko") %>' />
                    </td>
                    <td>
                      <asp:Label ID="AdressLabel" runat="server" Text='<%#Eval("adres") %>' />
                    </td>
                    <td>
                      <asp:Label ID="CityLabel" runat="server" Text='<%#Eval("miasto") %>' />
                    </td>
                    <td>
                      <asp:Label ID="DataLabel" runat="server" Text='<%#Eval("data") %>' />
                    </td>
                    <td>
                      <asp:Label ID="TimeLabel" runat="server" Text='<%#Eval("godzina") %>' />
                    </td>
                  </tr>
            </ItemTemplate>
            </asp:ListView>

        </div>

Pozostało 580 znaków

2014-08-10 15:34
0

w końcu sobie poradziłem, należało najpierw przejrzeć wszystkie Itemy w listview i w nich szukać dropdawnlist, wrzucam kod może komuś się przyda :) dzięki za pomoc somekind miałeś duży wkład :)


  protected void Item_Bound(object sender, ListViewItemEventArgs e)
    {
        foreach (var listItem ListView1.Items)
        {
                DropDownList dropdownlist = e.Item.FindControl("DropDownList1") as DropDownList;

                    string ktr, mtr;
                    for (int k = 0; k < 24; k++)
                    {
                        for (int m = 0; m < 60; m = m + 5)
                        {

                            if (k < 10)
                            {
                                ktr = "0" + k.ToString();
                            }
                            else
                            {
                                ktr = k.ToString();
                            }
                            if (m < 10)
                            {
                                mtr = "0" + m.ToString();
                            }
                            else
                            {
                                mtr = m.ToString();
                            }
                            dropdownlist.Items.Add(new ListItem(ktr + ":" + mtr));

                        }
                    }
            }
        }

Dropdownlist jest wypiełniony godzinami tak jak chciałem, pozdrawiam :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0