Текстовое поле «Связывание данных», поле «Значение данных» для asp: Dropdownlist

1

Я создал вспомогательную функцию для выпадающего списка Bind в asp.net. См. Мою функцию:

  public void BindDDL(string query, DropDownList DDL)
    {
        List<Issuetype> obj = new List<Issuetype>();
        Issuetype iss = new Issuetype();
        iss.DeptId = 1;
        iss.Issue = "SSS";
        iss.IssuetypeId = 4;
        obj.Add(iss);
        //BALissue Bl = new BALissue();
        //List<Issuetype> objSource = null;
        //objSource = Bl.Bind_issuetypes(query);
        DDL.DataSource = obj;
        DDL.DataValueField = Convert.ToString(obj[0]);
        DDL.DataTextField = Convert.ToString(obj[1]);
        DDL.DataBind();

    }

Таким образом, если я отправляю имя запроса и идентификатор Dropdownlist в функцию, выпадающее меню должно быть привязано по элементу List of issuetype, вы можете увидеть свойства Emetype в коде.

Но, тем не менее, я не могу правильно настроить DataValueField и DataTextField. Каждый раз, когда он говорит, что индекс выходит за пределы диапазона.

  • 0
    Вы можете передать DataValueField и DataTextField в качестве параметров методу BindDDL () и использовать их.
Теги:

3 ответа

1

DataValueField и DataTextField должны быть именами поля в вашей коллекции, а не значениями из коллекции.

    DDL.DataSource = obj;
    DDL.DataValueField = "Issue"; //example choose what is needed
    DDL.DataTextField = "IssuetypeId"; //example choose what is needed
    DDL.DataBind();

Исключение выбрано потому, что в вашей коллекции у вас есть 1 элемент, но вы пытаетесь поставить второй элемент (не существует) в DataTextField. Но это не имеет значения, если вы исправите свой код.

1

На самом деле в коде нет obj[1] потому что у вас есть только один элемент в списке obj, поэтому на

DDL.DataTextField = Convert.ToString(obj[1]);

в этой строке вы получите исключение

Вместо этого вы можете использовать

   DDL.DataValueField = "Issue"; 
   DDL.DataTextField = "IssuetypeId";

И чтобы получить имена свойств, используйте Reflection

using System.Reflection;  // reflection namespace  
// get all public static properties of MyClass type
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public | BindingFlags.Static);
// sort properties by name
Array.Sort(propertyInfos,
        delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
        { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });
// write property names
foreach (PropertyInfo propertyInfo in propertyInfos)
{
  Console.WriteLine(propertyInfo.Name);
}
  • 0
    Я хочу использовать эту функцию для разных списков, есть ли способ получить имена свойств по индексу
  • 0
    @ user3452210 вы можете передать DataValueField и DataTextField в качестве параметров методу BindDDL () и использовать их.
Показать ещё 9 комментариев
1

Необходимо указать поля ключа и значения. В вашем случае вы добавляете один элемент в список, но пытаетесь получить доступ ко второму (несуществующему) элементу при попытке указать значение: Convert.ToString(obj[1]).

Вместо этого вы, скорее всего, захотите:

DDL.DataValueField = "IssuetypeId";
DDL.DataTextField = "Issue";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню