문제

이 ASPX 코드가 있습니다 : (샘플)

<asp:DropDownList runat="server" ID="ddList1"></asp:DropDownList>   

이 CodeBehind로 :

List<System.Web.UI.WebControls.ListItem> colors = new List<System.Web.UI.WebControls.ListItem>();
colors.Add(new ListItem("Select Value", "0"));
colors.Add(new ListItem("Red", "1"));
colors.Add(new ListItem("Green", "2"));
colors.Add(new ListItem("Blue", "3"));
ddList1.DataSource = colors;
ddList1.DataBind();

출력은 다음과 같습니다.

<select name="ddList1" id="ddList1">
    <option value="Select Value">Select Value</option>
    <option value="Red">Red</option>
    <option value="Green">Green</option>
    <option value="Blue">Blue</option>
</select>   

내 질문은 : 내 값 (숫자)이 사라지고 텍스트가 값과 텍스트로 사용 된 이유는 무엇입니까? 내가 사용하면 그것이 작동한다는 것을 알고 있습니다 ddList1.Items.Add(New ListItem("text", "value")) 방법이지만 다른 이유로 일반 목록을 데이터 소스로 사용해야합니다.

도움이 되었습니까?

해결책

Databind Method는 Datavaluefield 속성이 설정된 경우에만 값을 바인딩하기 때문입니다. Databind를 호출하기 전에 Datavaluefield 속성을 "value"로 설정하면 마크 업에 값이 나타납니다.

업데이트 : DatatextField 속성을 "텍스트"로 설정해야합니다. 데이터 바인딩 및 항목 추가는 수동으로 동일한 방식으로 작동하지 않기 때문입니다. Databinding은 유형 ListItem의 존재를 알지 못하고 데이터 소스의 항목을 평가하여 마크 업을 생성합니다.

다른 팁

다음은 데이터 바인딩을 수행하는 방법이 있습니다. 무슨 일이 일어나고 있는지 정확히 볼 수 있습니다.

protected internal override void PerformDataBinding(IEnumerable dataSource)
{
    base.PerformDataBinding(dataSource);
    if (dataSource != null)
    {
        bool flag = false;
        bool flag2 = false;
        string dataTextField = this.DataTextField;
        string dataValueField = this.DataValueField;
        string dataTextFormatString = this.DataTextFormatString;
        if (!this.AppendDataBoundItems)
        {
            this.Items.Clear();
        }
        ICollection is2 = dataSource as ICollection;
        if (is2 != null)
        {
            this.Items.Capacity = is2.Count + this.Items.Count;
        }
        if ((dataTextField.Length != 0) || (dataValueField.Length != 0))
        {
            flag = true;
        }
        if (dataTextFormatString.Length != 0)
        {
            flag2 = true;
        }
        foreach (object obj2 in dataSource)
        {
            ListItem item = new ListItem();
            if (flag)
            {
                if (dataTextField.Length > 0)
                {
                    item.Text = DataBinder.GetPropertyValue(obj2, dataTextField, dataTextFormatString);
                }
                if (dataValueField.Length > 0)
                {
                    item.Value = DataBinder.GetPropertyValue(obj2, dataValueField, null);
                }
            }
            else
            {
                if (flag2)
                {
                    item.Text = string.Format(CultureInfo.CurrentCulture, dataTextFormatString, new object[] { obj2 });
                }
                else
                {
                    item.Text = obj2.ToString();
                }
                item.Value = obj2.ToString();
            }
            this.Items.Add(item);
        }
    }
    if (this.cachedSelectedValue != null)
    {
        int num = -1;
        num = this.Items.FindByValueInternal(this.cachedSelectedValue, true);
        if (-1 == num)
        {
            throw new ArgumentOutOfRangeException("value", SR.GetString("ListControl_SelectionOutOfRange", new object[] { this.ID, "SelectedValue" }));
        }
        if ((this.cachedSelectedIndex != -1) && (this.cachedSelectedIndex != num))
        {
            throw new ArgumentException(SR.GetString("Attributes_mutually_exclusive", new object[] { "SelectedIndex", "SelectedValue" }));
        }
        this.SelectedIndex = num;
        this.cachedSelectedValue = null;
        this.cachedSelectedIndex = -1;
    }
    else if (this.cachedSelectedIndex != -1)
    {
        this.SelectedIndex = this.cachedSelectedIndex;
        this.cachedSelectedIndex = -1;
    }
}

ListItems를 구축하는 경우 처음에 Databind ()를 사용할 필요가 없습니다.

드롭 다운 목록에 추가하십시오.



ddList1.Items.Add(new ListItem("Select Value", "0"));
ddList1.Items.Add(new ListItem("Red", "1"));
ddList1.Items.Add(new ListItem("Green", "2"));
ddList1.Items.Add(new ListItem("Blue", "3"));

Databind ()는 Datatextfield 및 Datavaluefield (BuyUtec이 작성한)를 설정하여 데이터 소스로 사용할 수있는 Collection/DataObject (일반적으로 DataTable 또는 DataView)가 이미있을 때 유용합니다.

"ListItems를 구축하는 경우 처음에 Databind ()를 사용할 필요가 없습니다."

DropdownList에 직접 추가하는 것은 쉬운 방법입니다 (예제 코드가 올바른 코드가 올바른 것)이지만, 지정되지 않은 데이터 소스가 있고 목록 항목을 정렬한다고 가정 해 봅시다.

이를 달성하는 한 가지 방법은 목록의 일반적인 목록을 작성한 다음 목록에 데이터베인딩하기 전에 상속 된 정렬 메소드를 사용하는 것입니다.

고양이 피부에 많은 wys가 있습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top