繁体   English   中英

使用DataTextField和DataValueField从另一个列表复制下拉列表

[英]Copy dropdownlist from another list with DataTextField and DataValueField

我创建了一个数据层方法

  public static List<SegmentBL> GetAllSegment(string SortDirection, string SortExpression)
    {

        var ds = DBHelper.GetDatabase().ExecuteDataSet("UDS_Select_SegmentMaster");

        var val = ds.Tables[0].AsEnumerable().Select(r => new SegmentBL
        {
            _SegmentId = Convert.ToInt32(r[0].ToString()),
            _SegmentName = r[1].ToString()
        });
        List<SegmentBL> list = val.ToList();
        return list;
    }

从那里我创建了一个Bussiness逻辑方法

public DropDownList GetAll(string SortDirection, string SortExpression)
    {
        var list = new DropDownList();
        list.DataSource = SegmentDL.GetAllSegment(SortDirection, SortExpression);
        list.DataTextField = "_SegmentName";
        list.DataValueField = "_SegmentID";
        list.DataBind();
        ListItem item = new ListItem();
        item.Text = "--Select--";
        item.Value = "0";
        list.Items.Insert(0, item);
        return list;
    }

最后用于填充下拉列表的表示层方法

 private void FillSegment()
    {
        ddlSegment.DataSource = seg.GetAll(General.SortAscending,"SegmentID").Items;

        ddlSegment.DataBind();
        ddlSegment.DataTextField = "_SegmentName";
        ddlSegment.DataValueField = "_SegmentID";
    }

除了没有正确分配DataTextField和DataValueField之外,它工作正常。 目前DataTextField和DataValueField相同。 我在上面的代码中做了什么错误。

在添加元素之后将元素添加到数据源绑定之前绑定。 您可以pass dropdownlist pass给在GetAll方法中创建本地下拉列表的方法。

public DropDownList GetAll(string SortDirection, string SortExpression, DropDownList list)
{
  //  var list = new DropDownList(); //Remove this line
    list.DataSource = SegmentDL.GetAllSegment(SortDirection, SortExpression);
    list.DataTextField = "_SegmentName";
    list.DataValueField = "_SegmentID";      
    ListItem item = new ListItem();
    item.Text = "--Select--";
    item.Value = "0";
    list.Items.Insert(0, item);
    list.DataBind();
    return list;
}

移动Databind()行。

private void FillSegment()
    {
        ddlSegment.DataSource = seg.GetAll(General.SortAscending,"SegmentID").Items;


        ddlSegment.DataTextField = "_SegmentName";
        ddlSegment.DataValueField = "_SegmentID";

        ddlSegment.DataBind(); //After and not before defining the fields value
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM