none
Ошибка привязки DropDown внутри GridView при редактировании RRS feed

  • Общие обсуждения

  • Изначально, данные для DropDown брались из SQLDataSource  и всё редактирование данных работало как надо:

                <EditItemTemplate>
                    <asp:DropDownList ID="OrderState_DropDownList" runat="server" DataTextField="OrderStatusValueTitle" SelectedValue='<%# Bind("OrderStatusID")%>'
                    DataValueField="OrderStatusID" DataSourceID="OrderState_SqlDataSource">
                    </asp:DropDownList>
    
                </EditItemTemplate>

    Через время мне поставили задачу данные из бд определенным образом менять налету, и я решил, что будет проще брать измененные данные сразу из спец. метода, который возвращает объект вида List<MyData> с уже "готовыми" данными.

    Вот произведенные мною изменения:

                    <asp:DropDownList ID="OrderStatus_DropDownList" runat="server" 
                        oninit="OrderStatus_DropDownList_Init" DataValueField="OrderStatusID"
                        DataTextField="OrderStatusValueTitle" SelectedValue='<%# Bind("OrderStatusID")%>'>
                    </asp:DropDownList>


        protected void OrderStatus_DropDownList_Init(object sender, EventArgs e)
        {
            (sender as DropDownList).DataSource = OrderCheckAndPay.GetOrderStatusList();
            (sender as DropDownList).DataBind();
        }

    При попытке изменения данных в GridView вылетает ошибка: 

    Методы привязки данных, например, Eval(), XPath() и Bind(), можно использовать только в контексте элемента управления с привязкой к данным.

    Причем ошибка обнаруживается в строке: 

    <asp:DropDownList ID="OrderStatus_DropDownList" runat="server"

    Скажите, что я делаю не так?


    19 октября 2012 г. 19:04

Все ответы

  • Вы не там привязываете данные, поэтому метод Bind() не находит их, попробуйте так:

    void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
    { 
    	if(e.Row.RowType == DataControlRowType.DataRow) 
    	{ 
    		DropDownList ddl = e.Item.FindControl("ddlContinent") as DropDownList; 
    		if (ddl != null)
    		{
    			ddl.DataSource = OrderCheckAndPay.GetOrderStatusList();
    			ddl.DataBind();
    		}
    	}
    }

    19 октября 2012 г. 20:00
    Модератор
  • Ошибка: 'OrderStatus_DropDownList' имеет SelectedValue, что недопустимо, так как этот элемент не существует в списке элементов.
    Имя параметра: value

    Чтобы наверняка, делал так:

        protected void OrdersGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
           
            foreach (TableCell cell in e.Row.Cells)
            {
                foreach (Control ctrl in cell.Controls) 
                {
                    if (ctrl is DropDownList)
                    {
                        if (ctrl.ID.Contains("OrderStatus_DropDownList"))
                        {
                            DropDownList ddl = (DropDownList)ctrl;
                            ddl.DataSource = OrderCheckAndPay.GetOrderStatusList();
                            ddl.DataTextField = "OrderStatusValueTitle";
                            ddl.DataValueField = "OrderStatusID";
                            ddl.DataBind(); 
    
                        }
    
                    }
                }
    
            }
         
    
        }

    Дебаг проходит все циклы, условие не обнаруживает ни одного контрола (при клике на кнопку редактирования) , после чего вылезает ошибка указанная в начале этого поста.

    • Изменено Kutcher 20 октября 2012 г. 16:16 неточность
    20 октября 2012 г. 15:48
  • Странно, а там он точно есть, может опечатки в названии идентификатора.
    22 октября 2012 г. 19:25
    Модератор
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]

    25 октября 2012 г. 10:29
    Модератор