kkgj Ответов: 1

Как я могу получить dropdownlist в редактирование шаблона элемента в GridView в АСП.нет.я попробовал добавить dropdownlist в пункт редактировать шаблон


я не могу заполнить выпадающий список в шаблоне редактирования элемента данными до привязки данных.из-за этого на databind() я получаю ошибку.

код aspx:

<asp:TemplateField HeaderText="City">
                       <ItemTemplate>
                           <asp:Label Text='<%# Eval("City") %>' runat="server" />
                       </ItemTemplate>
                       <EditItemTemplate>
                          <asp:TextBox ID="txtCity" Text='<%# Eval("City") %>' runat="server" />
                       </EditItemTemplate>
                       <FooterTemplate>
                           <asp:DropDownList ID="CityDropDownListFooter"  runat="server" onselectedindexchanged="cityDropDownList_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>
                       </FooterTemplate>
                   </asp:TemplateField>



aspx-файл.CS коде :

если (dtbl.Строк.Count > 0)
{
организацион-ный взгляд.Источник данных = dtbl;
организацион-ный взгляд.Привязку();
}

Что я уже пробовал:

aspx code:

<pre> <asp:TemplateField HeaderText="City">
                        <ItemTemplate>
                            <asp:Label Text='<%# Eval("City") %>' runat="server" />
                        </ItemTemplate>
                        <EditItemTemplate>
                           <asp:TextBox ID="txtCity" Text='<%# Eval("City") %>' runat="server" />
                        </EditItemTemplate>
                        <FooterTemplate>
                            <asp:DropDownList ID="CityDropDownListFooter"  runat="server" onselectedindexchanged="cityDropDownList_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>
                        </FooterTemplate>
                    </asp:TemplateField>



aspx-файл.CS коде :

если (dtbl.Строк.Count > 0)
{
организацион-ный взгляд.Источник данных = dtbl;
организацион-ный взгляд.Привязку();
}

как получить данные в раскрывающемся списке редактировать элемент?

удивительно, но функция rowdatabound не запускается при вызове databind ().

защищенный void organizationGridview_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{
Control ctrl = e.Row.FindControl("CityDropDownList");
if(ctrl!=null)
{
DropDownList ddl = (DropDownList)ctrl;
строка connectionString = System.Конфигурация.Конфигурационный менеджер.
ConnectionStrings["mydatabase"].Параметр connectionString;

MySqlConnection mcon = new MySqlConnection(connectionString);
Макон.Открыть();
Строки cmdText = "выбрать различные города от профсоюзной организации все выбрать "другое";";

MySqlCommand cmd = new MySqlCommand(cmdText, mcon);
MySqlDataAdapter mysqladapter = новый MySqlDataAdapter(cmd);
DataSet ds = новый набор данных();
mysqladapter.Заполнить(ДС);
ddl.DataTextField = ds.Tables[0].Колонны["Город"].Метод toString();
инструкции DDL.Источник данных = ДС.Таблицы[0];
инструкции DDL.Привязку();
Макон.Закрывать();
}
}

1 Ответов

Рейтинг:
0

Vincent Maverick Durano

То RowDataBound событие должно сработать. Вам нужно проверить RowType сначала а потом проверь на наличие RowState. Например:

protected void organizationGridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
            DropDownList ddlCity = (DropDownList)e.Row.FindControl("CityDropDownListFooter");
            
            //Do something with ddlCity here   

        }
    }
}


С тех пор как ваш DropDownList находится в пределах а FooterTemplate, то вам нужно проверить RowType чтобы убедиться, что вы манипулируете только строками типа Footer Пожалуйста, обратите внимание, что GridView состоит из нескольких типов строк, таких как Header, DataRow, EmptyDataRow, Footer, Pager и Separator Следующая строка в приведенном выше коде-это критическая часть кода, которая должна определить Edit государство.

Доступ к элементам управления из <edititemtemplate> немного сложен, особенно если вы действительно не знакомы с тем, как этот материал работает внутри GridView. Приравнивая RowState к DataControlState.Edit это не совсем точно, и при этом вы можете получить исключение. То RowState собственность-это bitwise сочетание. Таким образом, RowState может указывать на то, что вы находитесь в Edit государство и общество Alternate государство. Следовательно, вы не можете сделать простую проверку равенства, когда находитесь в режиме редактирования. Вместо этого вы должны сделать что-то подобное при доступе к элементам управления внутри EditItemTemplate.

if ((e.Row.RowState & DataControlRowState.Edit) > 0)   
{  
     //do your stuff here  
} 


Мы используем побитовое "&"оператор, чтобы определить, если GridView находится в режиме редактирования и проверяет результат, если он больше нуля. Подробнее о Побитовом операторе см.: Побитовые операторы в C#.[^]


kkgj

Спасибо за вашу помощь,я очень ценю ее.

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

код aspx:

OnRowCommand="organizationGridview_RowCommand" OnRowEditing="organizationGridview_RowEditing" OnRowDataBound="organizationGridview_RowDataBound" OnRowCancelingEdit="organizationGridview_RowCancelingedit"
OnRowUpdating="organizationGridview_RowUpdating" OnRowDeleting="organizationGridview_RowDeleting"

<asp:templatefield headertext="город">
<itemtemplate>
&ЛТ;АСП:текстовая метка="&ЛТ;%# Ивала("город") %&ГТ;" атрибут runat="сервер"и GT;

<edititemtemplate>
&ЛТ;АСП:ИД dropdownlist для="CityDropDownList" текст="&ЛТ;%# Ивала("город") %&ГТ;" атрибут runat="сервер" autopostback элемента управления="Правда"и GT;

<footertemplate>
&ЛТ;как ASP:dropdownlist с ИД="CityDropDownListFooter" атрибут runat="сервер" onselectedindexchanged="cityDropDownList_SelectedIndexChanged" autopostback элемента управления="Правда"и GT;


но некоторые показывают, что он не попадает в функцию rowdatabound для добавления элементов в citydropdownlist при редактировании шаблона элемента. я что-то упустил?


если (dtbl.Строк.Count > 0)
{
организацион-ный взгляд.Источник данных = dtbl;
организацион-ный взгляд.Привязку();
}

при вызове databind() я получил следующее сообщение об ошибке
""CityDropDownList" имеет значение SelectedValue, которое является недопустимым, поскольку оно не существует в списке элементов."

Vincent Maverick Durano

Затем просто изменил проверку типа строки на DataRow. Я обновил решение для вашей справки.