2015-03-03 2 views
0

У меня есть странная проблема, на которую я не могу найти ответ. У меня есть GridView с некоторыми ItemTemplate, а также два DropDownLists внутри 2 отдельных EditItemTemplates.Как заполнить DropDownList в GridView edititemtemplate?

Они оба выглядят одинаково, но только один из них признается в загрузке страницы, а другой нет, и я получаю сообщение об ошибке: «имя не существует в текущем контексте»

Я хочу, чтобы заполнить оба DropDownLists с данными из БД и сделать SelectedValue равным значению метки. HallsDDL работает нормально, а второй нет.

Я видел некоторые подобные проблемы в Google, но не смог найти ответ для этого.

Мой ASPX:

<asp:GridView ID="gv" runat="server" AllowPaging="true" AllowSorting="true" Font-Size = "13pt" RowStyle-CssClass="cssWidth" HorizontalAlign="Center" AutoGenerateColumns="false" 
    AlternatingRowStyle-BackColor="#EEEEEE" 
    OnPageIndexChanging="myGridView_PageIndexChanging" 
OnSorting="myGridView_Sorting" 
    onrowcancelingedit="GridView1_RowCancelling" 
    onrowediting="GridView1_RowEditing" 
    onrowupdating="GridView1_RowUpdating" OnRowCommand="GridView1_RowCommand" OnRowDataBound = "RowDataBound"> 

    <Columns>   
    <asp:TemplateField HeaderText="מזהה"> 
     <ItemTemplate> 
      <asp:LinkButton PostBackUrl='<%# "~/Events_workers.aspx?RowIndex=" + Container.DataItemIndex %>' runat="server" ID="Order_Id" Text='<%#Eval("Order_Id")%>' CssClass="cssWidth"/> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="שם פרטי" SortExpression="First_Name" > 

     <ItemTemplate> 
      <asp:Label runat="server" ID="First_Name" Text='<%#Eval("First_Name") %>' CssClass="cssWidth"/> 
     </ItemTemplate> 


    </asp:TemplateField> 
    <asp:TemplateField HeaderText="שם משפחה" SortExpression="Last_Name"> 

     <ItemTemplate> 
      <asp:Label runat="server" ID="Last_Name" Text='<%#Eval("Last_Name") %>' CssClass="cssWidth"/> 
     </ItemTemplate> 



    </asp:TemplateField> 

    <asp:TemplateField HeaderText="תאריך אירוע"> 

     <ItemTemplate> 
     <asp:Label runat="server" ID="EventDate" Text='<%#Eval("EventDate") %>' CssClass="cssWidth" /> 
     </ItemTemplate> 

     <EditItemTemplate> 
     <asp:TextBox runat="server" CssClass="cssWidth" ID="txtDate" Text='<%#Eval("EventDate") %>' MaxLength="15" onkeypress='validate(event)' /> 
     </EditItemTemplate> 

     </asp:TemplateField> 

     <asp:TemplateField HeaderText="אולם"> 

     <ItemTemplate> 
     <asp:Label runat="server" ID="HallName" Text='<%#Eval("HallName") %>' CssClass="cssWidth" /> 
     </ItemTemplate> 

     <EditItemTemplate> 
      <asp:Label ID="HallName" runat="server" Text='<%# Eval("HallName")%>' Visible = "false"></asp:Label> 
     <asp:DropDownList ID="HallsDDL" runat="server" CssClass="cssWidth"></asp:DropDownList> 
     </EditItemTemplate> 

     </asp:TemplateField> 
    <asp:TemplateField HeaderText="סוג אירוע"> 

     <ItemTemplate> 
     <asp:Label runat="server" ID="Event_Name" Text='<%#Eval("Event_Name") %>' CssClass="cssWidth" /> 
     </ItemTemplate> 



     </asp:TemplateField> 
     <asp:TemplateField HeaderText="תפריט"> 

     <ItemTemplate> 
     <asp:Label ID="Menu_Name" runat="server" Text='<%#Eval("Menu_Name") %>' CssClass="cssWidth" /> 
     </ItemTemplate> 
    <EditItemTemplate> 
      <asp:Label ID="Menu_Name" runat="server" Text='<%# Eval("Menu_Name")%>' Visible = "false"></asp:Label> 
     <asp:DropDownList ID="menuDDL" runat="server" CssClass="cssWidth" ></asp:DropDownList> 
     </EditItemTemplate> 


     </asp:TemplateField> 
     <asp:TemplateField HeaderText="כמות אורחים" SortExpression="Guest_Amount"> 

     <ItemTemplate> 
     <asp:Label runat="server" ID="Guest_Amount" Text='<%#Eval("Guest_Amount") %>' CssClass="cssWidth" /> 
     </ItemTemplate> 
     <EditItemTemplate> 
     <asp:TextBox runat="server" CssClass="cssWidth" ID="txtAGuest_Amount" Text='<%#Eval("Guest_Amount") %>' /> 
     </EditItemTemplate> 
     </asp:TemplateField> 


    <asp:TemplateField> 

    <ItemTemplate> 
    <asp:LinkButton ID="btnEdit" Text="ערוך" runat="server" CommandName="Edit" /> 
    </ItemTemplate> 


    <EditItemTemplate> 
    <asp:LinkButton ID="btnUpdate" Text="עדכן" runat="server" CommandName="Update" /> 
    <asp:LinkButton ID="btnCancel" Text="בטל" runat="server" CommandName="Cancel" /> 
    </EditItemTemplate> 

    </asp:TemplateField> 

    <asp:TemplateField> 

    <ItemTemplate> 
    <asp:LinkButton ID="btnDelete" Text="בטל אירוע" runat="server" CommandName="DeleteRecord" CausesValidation="False" 
CommandArgument='<%#Eval("Order_Id") %>'></asp:LinkButton> 

</ItemTemplate> 

    </asp:TemplateField> 

</Columns> 
</asp:GridView> 

Код позади:

protected void Page_Load(object sender, EventArgs e) 
{ 
    CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
    culture.DateTimeFormat.ShortDatePattern = ("dd/MM/yyyy"); 
    culture.DateTimeFormat.LongTimePattern = ""; 
    Thread.CurrentThread.CurrentCulture = culture; 
    dal.check_orders_date(); 
    /* if (Session["admin"] == null) 
    { 
     Response.Redirect("Admin_Login.aspx"); 
    }*/ 
    string state = (string)ViewState["state"]; 
    name.Text = "אירועים עתידיים:"; 
    DataTable Halls = new DataTable(); 
    DataTable Menus = new DataTable(); 

    if (!IsPostBack) 
    { 


     Halls = dal.get_halls(); 
     hallsDDL.DataSource = Halls; 
     hallsDDL.DataValueField = "HallName"; 
     hallsDDL.DataBind(); 
     Menus = dal.get_Menus(); 
     //menuDDL.DataSource = Menus; 
     //menuDDL.DataValueField = "Menu_Name"; 
     //menuDDL.DataBind(); 

     if (state != "edit" || ViewState["myDataTable"] == null) 
     { 
      BindGridData(); 
     } 
    } 

    if (Request.QueryString["fname"] == null && Request.QueryString ["lname"] == null && Request.QueryString["fdate"] == null && Request.QueryString["tdate"] == null && Request.QueryString["hall_id"] != null) 
    { 

     System.Data.DataTable ds = dal.Get_orders_by_hall(Convert.ToInt32 (Request.QueryString["hall_id"])); 

     SetViewState(ds); 
     gv.DataSource = ds; 
     gv.DataBind(); 

    } 

} 

В коде позади hallsDDL признается, пока menuDDL не существует. Я проверил и перепроверял все, но я не могу найти проблему.

Благодаря

ответ

1

Честно говоря, я удивлен, что hallsDDL показывает в отделенном коде. У вас есть еще DropDownList, за пределами GridView, который также называется hallsDDL?

управления, определенные шаблоны в шаблонах управления, как GridView не на уровне класса полей, как сама GridView есть, или способ, которым DropDownList расположен вне GridView будет. Страница не знает о них, потому что они являются внутренними для GridView. Они даже не существуют до тех пор, пока не будет привязан сам GridView.

Именно поэтому люди обычно связывают выпадающие списки и другие связанные с ними элементы управления в событиях на уровне строк, например RowEditing или RowDataBound. Эти события дают вам ссылку на определенную строку в аргументах событий и позволяют вам получить доступ к элементам управления в строке с помощью метода FindControl.

Для нескольких примеров этого вы можете посмотреть этот вопрос и ответить: How do you bind a DropDownList in a GridView in the EditItemTemplate Field.

+0

Это было просто большое смешение относительно имен и источников привязки. сейчас работает нормально, спасибо – yishai

0

вы якобы инициализацией в Page_Load.

Это правильно, что вы не можете ссылка menuDDL

Это абсолютно неправильно, что вы можете ссылка HallsDDL.

Он должен существовать в другом месте вашего кода, чтобы он был доступен в Page_Load. Вы не можете ссылаться на встроенный элемент управления на основе строк GridView без вызова FindControl(), обычно e.Row.FindControl() или, возможно, используя ForEach с GridView.Rows().

Я предлагаю вам проверить разметку страницы для изгоев осины: DropDownList Definiton

+0

спасибо за помощь – yishai

Смежные вопросы