【问题标题】:Binding Data text field, Data value field to asp:Dropdownlist将数据文本字段、数据值字段绑定到 asp:Dropdownlist
【发布时间】:2023-03-26 16:16:01
【问题描述】:

我已经创建了一个辅助函数来绑定 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 id发送给函数,下拉应该由Issuetype实体列表绑定,您可以在代码中看到Issuetype的属性。

但是我无法正确设置 DataValueField 和 DataTextField。每次都说索引超出范围。

【问题讨论】:

  • 您可以将 DataValueField 和 DataTextField 作为参数传递给 BindDDL() 方法并使用它们。

标签: c# asp.net


【解决方案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);
}

【讨论】:

  • 我想将此函数用于不同的列表,有没有办法通过索引获取属性名称
  • @user3452210 您可以将 DataValueField 和 DataTextField 作为参数传递给 BindDDL() 方法并使用它们。
  • 我可以做到,但我正在寻找一个简单的解决方案,我们可以在列表中获取属性名称。
  • 那么你想从类的属性名中为 DDL.DataValueField、DDL.DataTextField 赋值吗?
  • 是的..每次我调用这个方法返回的列表都会包含一个 ID 和 NAME 字段....所以我想将它们分别绑定到 ValueField 和 TextField
【解决方案2】:

您需要指定键和值字段。在您的情况下,您将一个项目添加到列表中,但在尝试指定值时尝试访问第二个(不存在的)项目:Convert.ToString(obj[1])

你可能想要的是这个:

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

【讨论】:

    【解决方案3】:

    DataValueFieldDataTextField 应该是集合中字段的名称,而不是集合中的值。

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

    抛出异常是因为在您的集合中有 1 个项目,但您尝试将第二个项目(不存在)放入 DataTextField。但是,如果您修复代码,这无关紧要。

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多