Хобрук: Ваш путь к мастерству в программировании

Привязка раскрывающегося списка внутри gridview edititemtemplate

Я не могу привязать свой раскрывающийся список в шаблоне edititem. Я получаю нулевую ссылку, когда пытаюсь получить к ней доступ.

Мой дизайн:

<asp:TemplateField HeaderText ="Category">
    <ItemTemplate >
    <asp:Label ID="drpcategory" Text ='<%#Bind("category") %>' runat ="server" />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="drpcategory1"  AppendDataBoundItems="True" runat="server" >
        </asp:DropDownList>
    </EditItemTemplate>
</asp:TemplateField> 

Мой код:

protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
    gv_table1.EditIndex = e.NewEditIndex;
    DropDownList drpcategory1 = ((DropDownList)gv_table1.Rows[e.NewEditIndex].Cells[8].FindControl("drpcategory1"));
    //BindDropDown(drpcategory1);
    dt = con.GetData("Select category_name from category");

    String str = gv_table1.Rows[e.NewEditIndex].FindControl("drpcategory1").GetType().ToString();
    //((DropDownList)gv_table1.Rows[e.NewEditIndex].Cells[8].FindControl("drpcategory1")).DataSource = dt;
    drpcategory1.DataSource = dt;
    drpcategory1.DataTextField = "category_name";
    drpcategory1.DataValueField = "category_name";
    drpcategory1.DataBind();

    this.setgrid();
}

Я пробовал искать в сети и много чего пробовал напрасно. Я новичок в asp. Заранее спасибо. Я хочу, чтобы раскрывающийся список был привязан только тогда, когда пользователь входит в режим редактирования.

03.09.2012

  • Что такое gv_table1? Думаю, проблема в этом. Пожалуйста, проверьте 03.09.2012
  • Не используйте Cells[8].FindControl("drpcategory1"), а row.FindControl("drpcategory1"), поскольку NamingContainer - это строка, а не ячейка. Ваш способ более подвержен ошибкам. 03.09.2012
  • Я использую только row.findcontrol. Я также использовал ячейки. Я пробовал оба, но не получил желаемого результата. 03.09.2012
  • VeeKeyBee, это мой человек по идентификатору gridview. 03.09.2012
  • @TimSchmelter row.FindControl у меня просто не работает ... что бы я ни пробовал. 16.07.2014

Ответы:


1

Отложенный код: протестированный код, а также установка значения, выбранного в раскрывающемся списке, в режиме редактирования.

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
            DropDownList ddList= (DropDownList)e.Row.FindControl("drpcategory1");
            //bind dropdown-list
            DataTable dt = con.GetData("Select category_name from category");
            ddList.DataSource = dt;
            ddList.DataTextField = "category_name";
            ddList.DataValueField = "category_name";
            ddList.DataBind();
            
            DataRowView dr = e.Row.DataItem as DataRowView;
            //ddList.SelectedItem.Text = dr["category_name"].ToString();
            ddList.SelectedValue = dr["category_name"].ToString();
        }
    }
}
    
protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
    gv.EditIndex = e.NewEditIndex;
    gridviewBind();// your gridview binding function
}
04.09.2012
  • Получил желаемое, человек. Но DataRowView dr = e.Row.DataItem as DataRowView; ddList.SelectedItem.Text = dr [category_name] .ToString (); эти две строки показали ошибку при удалении этих двух строк, которые я выполнил и получил результат, чувак. 04.09.2012
  • @Prashanth: хорошо, если это поможет, хорошо, вы можете вставить сообщение об ошибке, которое вы получаете для этих строк. 04.09.2012
  • Чувак, я исправил эту ошибку, это была просто проблема с именованием, но теперь Бро, все в порядке, но теперь первый элемент в раскрывающемся списке переписывается на значение метки man, когда в режиме редактирования (т.е. у меня повторяется один элемент, а также теряется другой . Надеюсь, вы понимаете, о чем я. 04.09.2012
  • @Prashanth: Бро, проверьте, что мой обновленный ответ исправил эту проблему, также отметьте голосование, если это поможет :) 04.09.2012
  • : ya man Я тоже это исправил, чувак. Я собирался обновить ваш ответ, чувак, но вы обновили его, чувак, спасибо. 04.09.2012
  • Можете ли вы опубликовать Row_Updating() для того же решения? При обновлении именно здесь мы фиксируем выбранный элемент раскрывающегося списка, не так ли? 15.07.2014
  • это именно то, что я хочу 13.08.2015

  • 2

    Я так делаю. В котором Name и Id - это два поля объекта Company:

    HTML-код:

    <asp:TemplateField HeaderText="Công ty">
        <EditItemTemplate>
            <asp:DropDownList ID="ddlCompanyEdit" DataSource="<%# PopulateddlCompanyEdit() %>" DataValueField="Id" DataTextField="Name" runat="server"></asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="lbCompany" runat="server" Text='<%#Bind("Company") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    

    Код C # позади:

    protected IEnumerable<Company> PopulateddlCompanyEdit()
    {
        using (var bkDb = new BrickKilnDb())
        {
            return bkDb.Companies.ToList();
        }
    }
    
    27.08.2018

    3

    Событие RowEditing происходит непосредственно перед редактированием строки.

    Вместо этого вы должны использовать событие RowDataBound.

    protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (gv.EditIndex == e.Row.RowIndex && 
           e.Row.RowType==DataControlRowType.DataRow) 
       {       
           DropDownList drpcategory1 = (DropDownList)e.Row.FindControl("drpcategory1"); 
           //bind the control
       }
    }
    
    03.09.2012
  • Значение Drpcategory1 равно нулю только тогда, когда я устанавливаю точку останова и проверяю значение. Я сделал, как вы сказали. 03.09.2012

  • 4

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

            protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowState == DataControlRowState.Edit)
            {
                DropDownList drpcategory1 = (DropDownList)e.Row.FindControl("drpcategory1");
                DataTable dt = con.GetData("Select category_name from category");
                drpcategory1.DataSource = dt;
                drpcategory1.DataTextField = "category_name";
                drpcategory1.DataValueField = "category_name";
                drpcategory1.DataBind();
            }
        }
    
    Hope this will help you.
    
    04.09.2012
    Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..