Эквивалент CType в C# для преобразования раскрывающегося списка, который находится в EditItemTemplate Gridview

Я использую Gridview для отображения некоторых данных. В EditItemTemplate gridview я использую DropDownList для одного из столбцов gridview. Источником данных gridview является таблица «UserEntries». А источник данных раскрывающегося списка - это еще одна таблица «TypeEntries». Столбцы TypeEntries: Guid и TypeName. Guid — это DataValueField раскрывающегося списка, а TypeName — это DataTextField. Я храню DataValueFiels раскрывающегося списка в таблице UserEntries.

Теперь, когда пользователь нажимает кнопку «Изменить» в представлении сетки, как заполнить раскрывающийся список таблицей «TypeEntries»? я использую

    Dropdownlist tempddl = new Dropdownlist();
    tempddl = (Dropdownlist)gvUserData.FindControl("ddlTypeListInGrid");
    tempddl.DataSource = _section.GetTypeEntries();
    tempddl.DataBind();

Но это не работает. Может ли кто-нибудь сказать мне другой способ выполнить эту задачу? Заранее спасибо.


person Devashri B.    schedule 16.01.2009    source источник
comment
Что не работает? Выдает какое-то исключение или что?   -  person TcKs    schedule 16.01.2009
comment
Сначала вы создаете раскрывающийся список, а затем устанавливаете его для другого элемента управления, вы должны выполнить любой из них.   -  person Recep    schedule 16.01.2009
comment
Выдает исключение. Ссылка на объект не указывает на экземпляр объекта.   -  person Devashri B.    schedule 16.01.2009
comment
Выпадающий список EditItemTemplate в gridview недоступен. Есть ли другой способ получить к нему доступ?   -  person Devashri B.    schedule 16.01.2009


Ответы (5)


Если вы получаете сообщение «Ссылка на объект не указывает на экземпляр объекта». в исключительных случаях это означает, что элемент управления "ddlTypeListInGrid" не найден. Таким образом, вы не можете привести NULL ( НИЧЕГО ) к целевому типу.

Возможно, вы делаете этот код в жизненном цикле неправильной страницы. Попробуйте это в одном из последующих событий oage (Load, LoadComplete и т.д.) или проверьте, действительно ли контейнер содержит элемент управления с идентификатором "ddlTypeListInGrid".

person TcKs    schedule 16.01.2009
comment
Есть ли другой способ сделать это, а не преобразовывать само выпадающее меню в выпадающее?? - person Devashri B.; 16.01.2009
comment
Проблема не в преобразовании, а в том, что элемент управления с именем ddlTypeListInGrid не найден. Так что конвертировать нечего. Установите точку останова на строку gvUserData и посмотрите, какие элементы управления в ней находятся. - person TcKs; 16.01.2009

C# чувствителен к регистру, вместо него следует использовать DropDownList.

person mmx    schedule 16.01.2009
comment
Я использовал DropDownList сейчас. Все еще не работает. Это дает ошибку. Ссылка на объект не установлена ​​​​на экземпляр объекта. - person Devashri B.; 16.01.2009

Вы ищете Convert.ChangeType, мне нужно увидеть больше кода, чтобы решить вашу проблему.

person Mike Geise    schedule 16.01.2009

Я загружаю весь код функции.

protected void gvUserData_OnRowEditing(object sender, GridViewEditEventArgs  e)
{
    gvUserData.EditIndex = e.NewEditIndex;

    gvUserData.DataSource = _section.GetUserEntries();
    gvUserData.DataBind();

    DropDownList tempddl = new DropDownList();       //I am not sure whether this is correct or not..        
    tempddl = (DropDownList)gvUserData.FindControl("ddlTypeListInGrid");
    tempddl.DataSource = _section.GetTypeEntries();
    tempddl.DataBind();        

}
person Devashri B.    schedule 16.01.2009

В качестве примечания (не связанного с вашей проблемой, просто для информации) следующая строка:

 DropDownList tempddl = new DropDownList();       

Может быть :

 DropDownList tempddl;

Вам не нужно создавать новый экземпляр DropDownList, поскольку в следующей строке вы пытаетесь найти экземпляр с именем «ddlTypeListInGrid». Затем, как сказал Tcks, если элемент управления ddlTypeListInGrid не существует, вы, скорее всего, получите исключение NullReferenceException.

person Wyvern    schedule 16.01.2009